From 9f7cdba8b70545d169d6ef2ada393f07810e2119 Mon Sep 17 00:00:00 2001 From: RoaaGhali98 Date: Sun, 20 Mar 2022 08:37:48 +0300 Subject: [PATCH] Refactoring procedure pages --- lib/core/viewModel/procedure_View_model.dart | 64 +++-- .../procedures/add_procedure_page.dart | 259 +++++++++--------- .../base_add_procedure_tab_page.dart | 2 +- .../entity_list_checkbox_search_widget.dart | 12 +- .../procedures/expansion_procedure.dart | 1 - .../add_favourite_procedure.dart | 19 +- .../entity_list_fav_procedure.dart | 30 +- .../procedure_checkout_screen.dart | 33 +-- 8 files changed, 186 insertions(+), 234 deletions(-) rename lib/screens/procedures/{ => favorite_procedure}/add_favourite_procedure.dart (89%) rename lib/screens/procedures/{ => favorite_procedure}/entity_list_fav_procedure.dart (85%) rename lib/screens/procedures/{ => favorite_procedure}/procedure_checkout_screen.dart (90%) diff --git a/lib/core/viewModel/procedure_View_model.dart b/lib/core/viewModel/procedure_View_model.dart index 23d90189..26ddeb61 100644 --- a/lib/core/viewModel/procedure_View_model.dart +++ b/lib/core/viewModel/procedure_View_model.dart @@ -9,6 +9,7 @@ import 'package:doctor_app_flutter/core/model/procedure/categories_procedure.dar import 'package:doctor_app_flutter/core/model/procedure/categories_procedure.dart' as cpe; import 'package:doctor_app_flutter/core/model/procedure/get_ordered_procedure_model.dart'; import 'package:doctor_app_flutter/core/model/procedure/post_procedure_req_model.dart'; +import 'package:doctor_app_flutter/core/model/procedure/procedure_templateModel.dart'; import 'package:doctor_app_flutter/core/model/procedure/procedure_template_details_model.dart'; import 'package:doctor_app_flutter/core/model/procedure/procedure_valadate_model.dart'; import 'package:doctor_app_flutter/core/model/procedure/procedure_valadate_request_model.dart'; @@ -68,28 +69,6 @@ class ProcedureViewModel extends BaseViewModel { List get procedureTemplateDetails => _procedureService.templateDetailsList; - List entityList = List(); - - - - Future filterSearchResults(String query,List masterList, List items) async { - List dummySearchList = List(); - dummySearchList.addAll(masterList); - if (query.isNotEmpty) { - List dummyListData = List(); - dummySearchList.forEach((item) { - if (item.procedureName.toLowerCase().contains(query.toLowerCase())) { - dummyListData.add(item); - } - }); - items.clear(); - items.addAll(dummyListData); - } else { - items.clear(); - items.addAll(masterList); - } - } - Future getProcedure({int mrn, String patientType, int appointmentNo}) async { hasError = false; await getDoctorProfile(); @@ -461,7 +440,7 @@ class ProcedureViewModel extends BaseViewModel { return false; } - isProcedureEntityListSelected({ProcedureTempleteDetailsModel masterKey, List entityList }) { + bool isProcedureEntityListSelected(ProcedureTempleteDetailsModel masterKey, List entityList) { Iterable history = entityList.where( (element) => masterKey.templateID == element.templateID && @@ -472,6 +451,8 @@ class ProcedureViewModel extends BaseViewModel { return false; } + + Future addProcedures(ProcedureViewModel model, List items, PatiantInformtion patient, @@ -500,4 +481,41 @@ class ProcedureViewModel extends BaseViewModel { Navigator.pop(context); Navigator.pop(context); } + + Future filterSearchResults(String query,List masterList, List items) async { + List dummySearchList = List(); + dummySearchList.addAll(masterList); + if (query.isNotEmpty) { + List dummyListData = List(); + dummySearchList.forEach((item) { + if (item.procedureName.toLowerCase().contains(query.toLowerCase())) { + dummyListData.add(item); + } + }); + items.clear(); + items.addAll(dummyListData); + } else { + items.clear(); + items.addAll(masterList); + } + } + + void filterProcedureSearchResults(String query, List masterList, List items) { + List dummySearchList = List(); + dummySearchList.addAll(masterList); + if (query.isNotEmpty) { + List dummyListData = List(); + dummySearchList.forEach((item) { + if (item.templateName.toLowerCase().contains(query.toLowerCase())) { + dummyListData.add(item); + } + }); + items.clear(); + items.addAll(dummyListData); + return; + } else { + items.clear(); + items.addAll(masterList); + } + } } diff --git a/lib/screens/procedures/add_procedure_page.dart b/lib/screens/procedures/add_procedure_page.dart index e5fd22e8..03d73f39 100644 --- a/lib/screens/procedures/add_procedure_page.dart +++ b/lib/screens/procedures/add_procedure_page.dart @@ -63,145 +63,144 @@ class _AddProcedurePageState extends State { builder: (BuildContext context, ProcedureViewModel model, Widget child) => AppScaffold( isShowAppBar: false, - body: Column( - children: [ - Container( - height: MediaQuery.of(context).size.height * 0.070, - ), - Expanded( - child: NetworkBaseView( + body: SingleChildScrollView( + child: Column( + children: [ + Container( + height: MediaQuery.of(context).size.height * 0.070, + ), + NetworkBaseView( baseViewModel: model, - child: SingleChildScrollView( - child: Container( - child: Padding( - padding: EdgeInsets.all(12.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - if (procedureType == ProcedureType.PROCEDURE) - Column( - children: [ - Row( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - children: [ - AppText( - TranslationBase.of(context) - .pleaseEnterProcedure, - fontWeight: FontWeight.w700, - fontSize: 20, - ), - ], - ), - SizedBox( - height: - MediaQuery.of(context).size.height * 0.02, - ), - Row( - children: [ - Container( - width: MediaQuery.of(context).size.width * - 0.79, - child: AppTextFieldCustom( - hintText: TranslationBase.of(context) - .searchProcedureHere, - isTextFieldHasSuffix: false, - maxLines: 1, - minLines: 1, - hasBorder: true, - controller: procedureName, - ), - ), - SizedBox( - width: MediaQuery.of(context).size.width * - 0.02, + child: Container( + child: Padding( + padding: EdgeInsets.all(12.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + if (procedureType == ProcedureType.PROCEDURE) + Column( + children: [ + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + AppText( + TranslationBase.of(context) + .pleaseEnterProcedure, + fontWeight: FontWeight.w700, + fontSize: 20, + ), + ], + ), + SizedBox( + height: + MediaQuery.of(context).size.height * 0.02, + ), + Row( + children: [ + Container( + width: MediaQuery.of(context).size.width * + 0.79, + child: AppTextFieldCustom( + hintText: TranslationBase.of(context) + .searchProcedureHere, + isTextFieldHasSuffix: false, + maxLines: 1, + minLines: 1, + hasBorder: true, + controller: procedureName, ), - Expanded( - child: InkWell( - onTap: () { - if (procedureName.text.isNotEmpty && - procedureName.text.length >= 3) - model.getProcedureCategory( - patientId: patient.patientId, - categoryName: - procedureName.text); - else - DrAppToastMsg.showErrorToast( - TranslationBase.of(context) - .atLeastThreeCharacters, - ); - }, - child: Icon( - Icons.search, - size: 25.0, - ), + ), + SizedBox( + width: MediaQuery.of(context).size.width * + 0.02, + ), + Expanded( + child: InkWell( + onTap: () { + if (procedureName.text.isNotEmpty && + procedureName.text.length >= 3) + model.getProcedureCategory( + patientId: patient.patientId, + categoryName: + procedureName.text); + else + DrAppToastMsg.showErrorToast( + TranslationBase.of(context) + .atLeastThreeCharacters, + ); + }, + child: Icon( + Icons.search, + size: 25.0, ), ), - ], - ), - ], - ), - if ((procedureType == ProcedureType.PROCEDURE - ? procedureName.text.isNotEmpty - : true) && - model.categoriesList.length != 0) - NetworkBaseView( - baseViewModel: model, - child: EntityListCheckboxSearchWidget( - model: widget.model, - masterList: - model.categoriesList[0].entityList, - removeHistory: (item) { - setState(() { - entityList.remove(item); - }); - }, - addHistory: (history) { - setState(() { - entityList.add(history); - }); - }, - addSelectedHistories: () { - }, - isEntityListSelected: (master) => - widget.model.isEntityListSelected(master,entityList), - )), - ], - ), + ), + ], + ), + ], + ), + if ((procedureType == ProcedureType.PROCEDURE + ? procedureName.text.isNotEmpty + : true) && + model.categoriesList.length != 0) + NetworkBaseView( + baseViewModel: model, + child: EntityListCheckboxSearchWidget( + model: widget.model, + masterList: + model.categoriesList[0].entityList, + removeProcedure: (item) { + setState(() { + entityList.remove(item); + }); + }, + addProcedure: (history) { + setState(() { + entityList.add(history); + }); + }, + addSelectedHistories: () { + }, + isEntityListSelected: (master) => + widget.model.isEntityListSelected(master,entityList), + )), + SizedBox(height: 10,) + ], ), ), ), ), - ), - Container( - margin: EdgeInsets.all(SizeConfig.widthMultiplier * 5), - child: Wrap( - alignment: WrapAlignment.center, - children: [ - AppButton( - title: procedureType.getAddButtonTitle(context), - fontWeight: FontWeight.w700, - color: AppGlobal.appGreenColor, - onPressed: () async { - if (entityList.isEmpty == true) { - DrAppToastMsg.showErrorToast( - TranslationBase.of(context) - .fillTheMandatoryProcedureDetails, - ); - return; - } - await this.model.preparePostProcedure( - orderType: selectedType.toString(), - entityList: entityList, - patient: patient, - remarks: remarksController.text); - Navigator.pop(context); - }, - ), - ], + Container( + margin: EdgeInsets.all(SizeConfig.widthMultiplier * 5), + child: Wrap( + alignment: WrapAlignment.center, + children: [ + AppButton( + title: procedureType.getAddButtonTitle(context), + fontWeight: FontWeight.w700, + color: AppGlobal.appGreenColor, + onPressed: () async { + if (entityList.isEmpty == true) { + DrAppToastMsg.showErrorToast( + TranslationBase.of(context) + .fillTheMandatoryProcedureDetails, + ); + return; + } + await this.model.preparePostProcedure( + orderType: selectedType.toString(), + entityList: entityList, + patient: patient, + remarks: remarksController.text); + Navigator.pop(context); + }, + ), + ], + ), ), - ), - ], + ], + ), ), ), ); diff --git a/lib/screens/procedures/base_add_procedure_tab_page.dart b/lib/screens/procedures/base_add_procedure_tab_page.dart index 3cf90da5..7f37a09c 100644 --- a/lib/screens/procedures/base_add_procedure_tab_page.dart +++ b/lib/screens/procedures/base_add_procedure_tab_page.dart @@ -4,7 +4,7 @@ import 'package:doctor_app_flutter/core/model/patient/patiant_info_model.dart'; import 'package:doctor_app_flutter/screens/base/base_view.dart'; import 'package:doctor_app_flutter/screens/patients/profile/soap_update/shared_soap_widgets/bottom_sheet_title.dart'; import 'package:doctor_app_flutter/screens/prescription/add_prescription/add_prescription.dart'; -import 'package:doctor_app_flutter/screens/procedures/add_favourite_procedure.dart'; +import 'package:doctor_app_flutter/screens/procedures/favorite_procedure/add_favourite_procedure.dart'; import 'package:doctor_app_flutter/screens/procedures/add_procedure_page.dart'; import 'package:doctor_app_flutter/screens/procedures/procedure_type.dart'; import 'package:doctor_app_flutter/screens/procedures/tab_widget.dart'; diff --git a/lib/screens/procedures/entity_list_checkbox_search_widget.dart b/lib/screens/procedures/entity_list_checkbox_search_widget.dart index fc810d56..332300c2 100644 --- a/lib/screens/procedures/entity_list_checkbox_search_widget.dart +++ b/lib/screens/procedures/entity_list_checkbox_search_widget.dart @@ -13,8 +13,8 @@ import '../../config/config.dart'; class EntityListCheckboxSearchWidget extends StatefulWidget { final ProcedureViewModel model; final Function addSelectedHistories; - final Function(EntityList) removeHistory; - final Function(EntityList) addHistory; + final Function(EntityList) removeProcedure; + final Function(EntityList) addProcedure; final bool Function(EntityList) isEntityListSelected; final List masterList; @@ -22,9 +22,9 @@ class EntityListCheckboxSearchWidget extends StatefulWidget { {Key key, this.model, this.addSelectedHistories, - this.removeHistory, + this.removeProcedure, this.masterList, - this.addHistory, + this.addProcedure, this.isEntityListSelected, }) : super(key: key); @@ -103,11 +103,11 @@ class _EntityListCheckboxSearchWidgetState setState(() { if (widget.isEntityListSelected( historyInfo)) { - widget.removeHistory( + widget.removeProcedure( historyInfo); } else { widget - .addHistory(historyInfo); + .addProcedure(historyInfo); } }); }), diff --git a/lib/screens/procedures/expansion_procedure.dart b/lib/screens/procedures/expansion_procedure.dart index b0593b06..0ba2fa87 100644 --- a/lib/screens/procedures/expansion_procedure.dart +++ b/lib/screens/procedures/expansion_procedure.dart @@ -13,7 +13,6 @@ class ExpansionProcedure extends StatefulWidget { final Function(ProcedureTempleteDetailsModel) removeFavProcedure; final Function(ProcedureTempleteDetailsModel) addFavProcedure; final Function(ProcedureTempleteDetailsModel) selectProcedures; - final bool Function(ProcedureTempleteModel) isEntityListSelected; final bool Function(ProcedureTempleteDetailsModel) isEntityFavListSelected; final bool isProcedure; diff --git a/lib/screens/procedures/add_favourite_procedure.dart b/lib/screens/procedures/favorite_procedure/add_favourite_procedure.dart similarity index 89% rename from lib/screens/procedures/add_favourite_procedure.dart rename to lib/screens/procedures/favorite_procedure/add_favourite_procedure.dart index 5e61481a..ae98fe96 100644 --- a/lib/screens/procedures/add_favourite_procedure.dart +++ b/lib/screens/procedures/favorite_procedure/add_favourite_procedure.dart @@ -4,8 +4,8 @@ import 'package:doctor_app_flutter/core/viewModel/procedure_View_model.dart'; import 'package:doctor_app_flutter/core/model/patient/patiant_info_model.dart'; import 'package:doctor_app_flutter/screens/base/base_view.dart'; import 'package:doctor_app_flutter/screens/prescription/prescription_checkout_screen.dart'; -import 'package:doctor_app_flutter/screens/procedures/entity_list_fav_procedure.dart'; -import 'package:doctor_app_flutter/screens/procedures/procedure_checkout_screen.dart'; +import 'package:doctor_app_flutter/screens/procedures/favorite_procedure/entity_list_fav_procedure.dart'; +import 'package:doctor_app_flutter/screens/procedures/favorite_procedure/procedure_checkout_screen.dart'; import 'package:doctor_app_flutter/screens/procedures/procedure_type.dart'; import 'package:doctor_app_flutter/utils/dr_app_toast_msg.dart'; import 'package:doctor_app_flutter/utils/translations_delegate_base_utils.dart'; @@ -44,7 +44,7 @@ class _AddFavouriteProcedureState extends State { @override Widget build(BuildContext context) { return BaseView( - builder: (BuildContext context, ProcedureViewModel model_, + builder: (BuildContext context, ProcedureViewModel procedureViewModel, Widget child) => AppScaffold( isShowAppBar: false, @@ -67,7 +67,7 @@ class _AddFavouriteProcedureState extends State { }); }, isEntityFavListSelected: (master) => - isEntityListSelected(master), + procedureViewModel.isProcedureEntityListSelected(master, entityList), groupProcedures: groupProcedures, selectProcedures: (selectedProcedure) { setState(() { @@ -131,15 +131,4 @@ class _AddFavouriteProcedureState extends State { })), ); } - - bool isEntityListSelected(ProcedureTempleteDetailsModel masterKey) { - Iterable history = entityList.where( - (element) => - masterKey.templateID == element.templateID && - masterKey.procedureName == element.procedureName); - if (history.length > 0) { - return true; - } - return false; - } } diff --git a/lib/screens/procedures/entity_list_fav_procedure.dart b/lib/screens/procedures/favorite_procedure/entity_list_fav_procedure.dart similarity index 85% rename from lib/screens/procedures/entity_list_fav_procedure.dart rename to lib/screens/procedures/favorite_procedure/entity_list_fav_procedure.dart index e140824e..6598008b 100644 --- a/lib/screens/procedures/entity_list_fav_procedure.dart +++ b/lib/screens/procedures/favorite_procedure/entity_list_fav_procedure.dart @@ -8,8 +8,8 @@ import 'package:doctor_app_flutter/widgets/shared/network_base_view.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import '../../config/config.dart'; -import '../../widgets/shared/text_fields/app_text_field_custom_serach.dart'; +import '../../../config/config.dart'; +import '../../../widgets/shared/text_fields/app_text_field_custom_serach.dart'; class EntityListCheckboxSearchFavProceduresWidget extends StatefulWidget { final ProcedureViewModel model; @@ -95,7 +95,7 @@ class _EntityListCheckboxSearchFavProceduresWidgetState AppTextFieldCustomSearch( searchController: patientFileInfoController, onChangeFun: (value) { - filterSearchResults(value); + widget.model.filterProcedureSearchResults(value, widget.masterList, items); }, marginTop: 5, inputFormatters: [ @@ -140,28 +140,4 @@ class _EntityListCheckboxSearchFavProceduresWidgetState ), ); } - - ///TODO Elham* move it to view model and try to make it work for every search - void filterSearchResults(String query) { - List dummySearchList = List(); - dummySearchList.addAll(widget.masterList); - if (query.isNotEmpty) { - List dummyListData = List(); - dummySearchList.forEach((item) { - if (item.templateName.toLowerCase().contains(query.toLowerCase())) { - dummyListData.add(item); - } - }); - setState(() { - items.clear(); - items.addAll(dummyListData); - }); - return; - } else { - setState(() { - items.clear(); - items.addAll(widget.masterList); - }); - } - } } diff --git a/lib/screens/procedures/procedure_checkout_screen.dart b/lib/screens/procedures/favorite_procedure/procedure_checkout_screen.dart similarity index 90% rename from lib/screens/procedures/procedure_checkout_screen.dart rename to lib/screens/procedures/favorite_procedure/procedure_checkout_screen.dart index fdd847f3..9d312604 100644 --- a/lib/screens/procedures/procedure_checkout_screen.dart +++ b/lib/screens/procedures/favorite_procedure/procedure_checkout_screen.dart @@ -1,9 +1,6 @@ import 'package:doctor_app_flutter/config/size_config.dart'; -import 'package:doctor_app_flutter/core/model/procedure/categories_procedure.dart'; import 'package:doctor_app_flutter/core/model/procedure/procedure_template_details_model.dart'; -import 'package:doctor_app_flutter/core/service/AnalyticsService.dart'; import 'package:doctor_app_flutter/core/viewModel/procedure_View_model.dart'; -import 'package:doctor_app_flutter/locator.dart'; import 'package:doctor_app_flutter/core/model/patient/patiant_info_model.dart'; import 'package:doctor_app_flutter/screens/base/base_view.dart'; import 'package:doctor_app_flutter/utils/translations_delegate_base_utils.dart'; @@ -13,8 +10,7 @@ import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; import 'package:doctor_app_flutter/widgets/shared/buttons/app_buttons_widget.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; - -import '../../config/config.dart'; +import '../../../config/config.dart'; class ProcedureCheckOutScreen extends StatefulWidget { final List items; @@ -221,7 +217,7 @@ class _ProcedureCheckOutScreenState extends State { color: AppGlobal.appGreenColor, fontWeight: FontWeight.w700, onPressed: () async { - addProcedures(model); + model.addProcedures(model, widget.items, widget.patient, remarksController, context); }, ), ], @@ -230,29 +226,4 @@ class _ProcedureCheckOutScreenState extends State { ), ); } - - Future addProcedures(ProcedureViewModel model) async { - List entityList = List(); - widget.items.forEach((element) { - entityList.add( - EntityList( - procedureId: element.procedureID, - remarks: element.remarks, - categoryID: element.categoryID, - type: element.type, - ), - ); - }); - await locator().logEvent( - eventCategory: "Procedure Checkout Screen", - eventAction: "Add New Procedure", - ); - Navigator.pop(context); - await model.preparePostProcedure( - entityList: entityList, - patient: widget.patient, - remarks: remarksController.text); - Navigator.pop(context); - Navigator.pop(context); - } }