Skip to content

Commit

Permalink
feat(#706): apply inhibitor medication change behavoir to current med…
Browse files Browse the repository at this point in the history
…ications list

* Uses switch tiles for current medications
* Refactors drug list
  • Loading branch information
tamslo committed Sep 5, 2024
1 parent c455385 commit 71cd73b
Show file tree
Hide file tree
Showing 13 changed files with 103 additions and 109 deletions.
6 changes: 3 additions & 3 deletions app/generate_screendocs/sequence_utils.dart
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ Future<void> _interactWithDrugListItem(
// ignore: avoid_print
print(contextDetails);
// ignore: avoid_print
print('Avilable drug items:');
print('Available drug items:');
final availableItems = find.descendant(
of: listFinder,
matching: find.byType(itemType, skipOffstage: false),
Expand All @@ -154,9 +154,9 @@ Future<void> interactWithDrugInSelection(
) async {
await _interactWithDrugListItem(
tester,
itemKey: 'drug-checkbox-tile-${drug.toLowerCase()}-all',
itemKey: 'drug-selection-tile-${drug.toLowerCase()}-all',
listKey: 'drug-selection',
itemType: CheckboxListTileWrapper,
itemType: SwitchListTile,
scroll: scroll,
tap: tap,
raiseException: raiseException,
Expand Down
39 changes: 0 additions & 39 deletions app/lib/common/widgets/checkbox_list_tile_wrapper.dart

This file was deleted.

57 changes: 57 additions & 0 deletions app/lib/common/widgets/drug_activity_selection.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import '../module.dart';

typedef SetDrugActivityFunction = void Function({
required Drug drug,
required bool? value,
});

SwitchListTile buildDrugActivitySelection({
Key? key,
required BuildContext context,
required Drug drug,
required String title,
String? subtitle,
required SetDrugActivityFunction setActivity,
required bool isActive,
required bool disabled,
EdgeInsetsGeometry? contentPadding,
}) => SwitchListTile.adaptive(
key: key,
value: isActive,
activeColor: PharMeTheme.primaryColor,
title: Text(title),
subtitle: subtitle.isNotNullOrBlank ? Text(subtitle!, style: PharMeTheme.textTheme.bodyMedium): null,
contentPadding: contentPadding,
onChanged: disabled ? null : (newValue) {
if (isInhibitor(drug.name)) {
showAdaptiveDialog(
context: context,
builder: (context) => DialogWrapper(
title: context.l10n.drugs_page_active_warn_header,
content: DialogContentText(
context.l10n.drugs_page_active_warn,
),
actions: [
DialogAction(
onPressed: () => Navigator.pop(
context,
'Cancel',
),
text: context.l10n.action_cancel,
),
DialogAction(
onPressed: () {
Navigator.pop(context, 'OK');
setActivity(drug: drug, value: newValue);
},
text: context.l10n.action_continue,
isDestructive: true,
),
],
),
);
} else {
setActivity(drug: drug, value: newValue);
}
},
);
11 changes: 9 additions & 2 deletions app/lib/common/widgets/drug_list/builder.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
import '../../module.dart';

class DrugItemsBuildParams {
DrugItemsBuildParams({required this.isEditable, required this.setActivity});

final bool isEditable;
final SetDrugActivityFunction setActivity;
}

List<Widget> buildDrugList(
BuildContext context,
DrugListState state,
Expand All @@ -10,13 +17,13 @@ List<Widget> buildDrugList(
BuildContext context,
List<Drug> drugs,
{
Map? buildParams,
DrugItemsBuildParams? buildParams,
bool showDrugInteractionIndicator,
}
) buildDrugItems = buildDrugCards,
bool showDrugInteractionIndicator = false,
bool useDrugClass = true,
Map? drugItemsBuildParams,
DrugItemsBuildParams? drugItemsBuildParams,
}
) {
List<Widget> buildDrugList(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ List<Widget> buildDrugCards(
BuildContext context,
List<Drug> drugs,
{
Map? buildParams,
DrugItemsBuildParams? buildParams,
bool showDrugInteractionIndicator = false,
}
) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ List<Widget> buildDrugSelectionList(
BuildContext context,
List<Drug> drugs,
{
Map? buildParams,
DrugItemsBuildParams? buildParams,
bool showDrugInteractionIndicator = false,
}
) {
Expand All @@ -19,14 +19,14 @@ List<Widget> buildDrugSelectionList(
style: TextStyle(fontStyle: FontStyle.italic),
),
)]
: _buildCheckboxList(
: _buildSelectionList(
context,
activeDrugs,
buildParams,
showDrugInteractionIndicator,
keyPrefix: 'active',
);
final allDrugsList = _buildCheckboxList(
final allDrugsList = _buildSelectionList(
context,
drugs,
buildParams,
Expand All @@ -49,21 +49,21 @@ List<Widget> buildDrugSelectionList(
];
}

List<CheckboxListTileWrapper> _buildCheckboxList(
List<SwitchListTile> _buildSelectionList(
BuildContext context,
List<Drug> drugs,
Map buildParams,
DrugItemsBuildParams buildParams,
bool showDrugInteractionIndicator,
{ required String keyPrefix }
) {
final onCheckboxChange = buildParams['onCheckboxChange'];
final checkboxesEnabled = buildParams['checkboxesEnabled'];
return drugs.map(
(drug) => CheckboxListTileWrapper(
key: Key('drug-checkbox-tile-${drug.name}-$keyPrefix'),
isEnabled: checkboxesEnabled,
isChecked: drug.isActive,
onChanged: (value) => onCheckboxChange(drug, value),
(drug) => buildDrugActivitySelection(
key: Key('drug-selection-tile-${drug.name}-$keyPrefix'),
context: context,
drug: drug,
disabled: !buildParams.isEditable,
isActive: drug.isActive,
setActivity: buildParams.setActivity,
title: formatDrugName(drug, showDrugInteractionIndicator),
subtitle: (drug.annotations.brandNames.isNotEmpty) ?
formatBrandNames(context, drug) :
Expand Down
4 changes: 2 additions & 2 deletions app/lib/common/widgets/drug_search/builder.dart
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,15 @@ class DrugSearch extends HookWidget {
BuildContext context,
List<Drug> drugs,
{
Map? buildParams,
DrugItemsBuildParams? buildParams,
bool showDrugInteractionIndicator,
}
) buildDrugItems;
final bool showDrugInteractionIndicator;
final DrugListCubit cubit;
final DrugListState state;
final ActiveDrugs activeDrugs;
final Map? drugItemsBuildParams;
final DrugItemsBuildParams? drugItemsBuildParams;

@override
Widget build(BuildContext context) {
Expand Down
2 changes: 1 addition & 1 deletion app/lib/common/widgets/module.dart
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
export 'annotation_table.dart';
export 'checkbox_list_tile_wrapper.dart';
export 'checkbox_wrapper.dart';
export 'dialog_action.dart';
export 'dialog_content_text.dart';
export 'dialog_wrapper.dart';
export 'direction_button.dart';
export 'drug_activity_selection.dart';
export 'drug_list/builder.dart';
export 'drug_list/cubit.dart';
export 'drug_list/drug_items/drug_cards.dart';
Expand Down
3 changes: 1 addition & 2 deletions app/lib/drug/cubit.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,7 @@ class DrugCubit extends Cubit<DrugState> {

final ActiveDrugs activeDrugs;

// ignore: avoid_positional_boolean_parameters
Future<void> setActivity(Drug drug, bool? value) async {
Future<void> setActivity({required Drug drug, required bool? value}) async {
if (value == null) return;
emit(DrugState.loading());
await activeDrugs.changeActivity(drug.name, value);
Expand Down
3 changes: 1 addition & 2 deletions app/lib/drug/pages/drug.dart
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,7 @@ class DrugPage extends StatelessWidget {
DrugAnnotationCards(
drug,
isActive: drug.isActive,
setActivity: ({ value }) =>
context.read<DrugCubit>().setActivity(drug, value),
setActivity: context.read<DrugCubit>().setActivity,
disabled: loading,
),
SizedBox(height: PharMeTheme.mediumSpace),
Expand Down
45 changes: 8 additions & 37 deletions app/lib/drug/widgets/annotation_cards/drug.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ class DrugAnnotationCards extends StatelessWidget {

final Drug drug;
final bool isActive;
final void Function({ bool? value }) setActivity;
final SetDrugActivityFunction setActivity;
final bool disabled;

@override
Expand All @@ -22,43 +22,14 @@ class DrugAnnotationCards extends StatelessWidget {
innerPadding: EdgeInsets.symmetric(horizontal: PharMeTheme.mediumSpace),
child: Column(
children: [
SwitchListTile.adaptive(
value: isActive,
activeColor: PharMeTheme.primaryColor,
title: Text(context.l10n.drugs_page_text_active),
buildDrugActivitySelection(
context: context,
drug: drug,
setActivity: setActivity,
title: context.l10n.drugs_page_text_active,
isActive: isActive,
disabled: disabled,
contentPadding: EdgeInsets.zero,
onChanged: disabled ? null : (newValue) {
if (isInhibitor(drug.name)) {
showAdaptiveDialog(
context: context,
builder: (context) => DialogWrapper(
title: context.l10n.drugs_page_active_warn_header,
content: DialogContentText(
context.l10n.drugs_page_active_warn,
),
actions: [
DialogAction(
onPressed: () => Navigator.pop(
context,
'Cancel',
),
text: context.l10n.action_cancel,
),
DialogAction(
onPressed: () {
Navigator.pop(context, 'OK');
setActivity(value: newValue);
},
text: context.l10n.action_continue,
isDestructive: true,
),
],
),
);
} else {
setActivity(value: newValue);
}
},
),
if (isInhibitor(drug.name)) ...[
SizedBox(height: PharMeTheme.smallSpace),
Expand Down
6 changes: 4 additions & 2 deletions app/lib/drug_selection/cubit.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,10 @@ class DrugSelectionCubit extends Cubit<DrugSelectionState> {

final ActiveDrugs activeDrugs;

// ignore: avoid_positional_boolean_parameters
Future<void> updateDrugActivity(Drug drug, bool? value) async {
Future<void> updateDrugActivity({
required Drug drug,
required bool? value,
}) async {
if (value == null) return;
emit(DrugSelectionState.updating());
await activeDrugs.changeActivity(drug.name, value);
Expand Down
10 changes: 4 additions & 6 deletions app/lib/drug_selection/pages/drug_selection.dart
Original file line number Diff line number Diff line change
Expand Up @@ -100,12 +100,10 @@ class DrugSelectionPage extends HookWidget {
keepPosition: true,
useDrugClass: false,
buildDrugItems: buildDrugSelectionList,
drugItemsBuildParams: {
'checkboxesEnabled': _isEditable(state),
'onCheckboxChange': (drug, value) => context
.read<DrugSelectionCubit>()
.updateDrugActivity(drug, value),
},
drugItemsBuildParams: DrugItemsBuildParams(
isEditable: _isEditable(state),
setActivity: context.read<DrugSelectionCubit>().updateDrugActivity,
),
showDrugInteractionIndicator: !concludesOnboarding,
),
);
Expand Down

0 comments on commit 71cd73b

Please sign in to comment.