Skip to content

Commit

Permalink
refactor(#706): move inhibitor code to inhibitor file
Browse files Browse the repository at this point in the history
  • Loading branch information
tamslo committed Sep 4, 2024
1 parent 247c390 commit fe8c73b
Show file tree
Hide file tree
Showing 4 changed files with 113 additions and 113 deletions.
110 changes: 110 additions & 0 deletions app/lib/common/models/drug/drug_inhibitors.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@

// structure: gene symbol -> drug name -> overwriting lookupkey

import 'package:collection/collection.dart';

import '../../module.dart';

// Inhibit phenotype for gene by overwriting with poor metabolizer
Expand Down Expand Up @@ -82,3 +84,111 @@ List<String> inhibitedGenes(Drug drug) {
List<String> inhibitorsFor(String gene) {
return _drugInhibitorsPerGene[gene] ?? [];
}

String possiblyAdaptedPhenotype(GenotypeResult genotypeResult) {
final originalPhenotype = genotypeResult.phenotypeDisplayString;
if (!isInhibited(genotypeResult)) {
return originalPhenotype;
}
final overwrittenLookup = getOverwrittenLookup(genotypeResult.gene);
if (overwrittenLookup == null) {
return '$originalPhenotype$drugInteractionIndicator';
}
return '$overwritePhenotype$drugInteractionIndicator';
}

bool isInhibited(
GenotypeResult genotypeResult,
{ String? drug }
) {
final activeInhibitors = activeInhibitorsFor(
genotypeResult.gene,
drug: drug,
);
final originalPhenotype = genotypeResult.phenotypeDisplayString;
final phenotypeCanBeInhibited =
originalPhenotype.toLowerCase() != overwritePhenotype.toLowerCase();
return activeInhibitors.isNotEmpty && phenotypeCanBeInhibited;
}

List<String> activeInhibitorsFor(String gene, { String? drug }) {
return UserData.instance.activeDrugNames == null
? <String>[]
: UserData.instance.activeDrugNames!.filter(
(activeDrug) =>
inhibitorsFor(gene).contains(activeDrug) &&
activeDrug != drug
).toList();
}

PhenotypeInformation phenotypeInformationFor(
GenotypeResult genotypeResult,
BuildContext context,
{
String? drug,
bool thirdPerson = false,
bool useLongPrefix = false,
}
) {
final userSalutation = thirdPerson
? context.l10n.drugs_page_inhibitor_third_person_salutation
: context.l10n.drugs_page_inhibitor_direct_salutation;
final strongInhibitorTextPrefix = useLongPrefix
? context.l10n.strong_inhibitor_long_prefix
: context.l10n.gene_page_phenotype.toLowerCase();
final originalPhenotype = genotypeResult.phenotypeDisplayString;
final activeInhibitors = activeInhibitorsFor(
genotypeResult.gene,
drug: drug,
);
if (!isInhibited(genotypeResult, drug: drug)) {
return PhenotypeInformation(phenotype: originalPhenotype);
}
final overwrittenLookup = getOverwrittenLookup(
genotypeResult.gene,
drug: drug,
);
if (overwrittenLookup == null) {
return PhenotypeInformation(
phenotype: originalPhenotype,
adaptionText: context.l10n.drugs_page_moderate_inhibitors(
userSalutation,
enumerationWithAnd(
activeInhibitors,
context
),
),
);
}
final originalPhenotypeText = context.l10n.drugs_page_original_phenotype(
thirdPerson
? context.l10n.drugs_page_inhibitor_third_person_salutation_genitive
: context.l10n.drugs_page_inhibitor_direct_salutation_genitive,
originalPhenotype,
);
return PhenotypeInformation(
phenotype: overwritePhenotype,
adaptionText: context.l10n.drugs_page_strong_inhibitors(
strongInhibitorTextPrefix,
userSalutation,
enumerationWithAnd(activeInhibitors, context),
),
overwrittenPhenotypeText: originalPhenotypeText,
);
}

MapEntry<String, String>? getOverwrittenLookup (
String gene,
{ String? drug }
) {
final inhibitors = strongDrugInhibitors[gene];
if (inhibitors == null) return null;
final lookup = inhibitors.entries.firstWhereOrNull((entry) {
final isActiveInhibitor =
UserData.instance.activeDrugNames?.contains(entry.key) ?? false;
final wouldInhibitItself = drug == entry.key;
return isActiveInhibitor && !wouldInhibitItself;
});
if (lookup == null) return null;
return lookup;
}
112 changes: 1 addition & 111 deletions app/lib/common/models/userdata/userdata.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import 'dart:convert';

import 'package:collection/collection.dart';
import 'package:hive/hive.dart';
import 'package:http/http.dart';

Expand Down Expand Up @@ -43,84 +42,12 @@ class UserData {
@HiveField(2)
Map<String, GenotypeResult>? genotypeResults;

static PhenotypeInformation phenotypeInformationFor(
GenotypeResult genotypeResult,
BuildContext context,
{
String? drug,
bool thirdPerson = false,
bool useLongPrefix = false,
}
) {
final userSalutation = thirdPerson
? context.l10n.drugs_page_inhibitor_third_person_salutation
: context.l10n.drugs_page_inhibitor_direct_salutation;
final strongInhibitorTextPrefix = useLongPrefix
? context.l10n.strong_inhibitor_long_prefix
: context.l10n.gene_page_phenotype.toLowerCase();
final originalPhenotype = genotypeResult.phenotypeDisplayString;
final activeInhibitors = UserData.activeInhibitorsFor(
genotypeResult.gene,
drug: drug,
);
if (!isInhibited(genotypeResult, drug: drug)) {
return PhenotypeInformation(phenotype: originalPhenotype);
}
final overwrittenLookup = UserData.overwrittenLookup(
genotypeResult.gene,
drug: drug,
);
if (overwrittenLookup == null) {
return PhenotypeInformation(
phenotype: originalPhenotype,
adaptionText: context.l10n.drugs_page_moderate_inhibitors(
userSalutation,
enumerationWithAnd(
activeInhibitors,
context
),
),
);
}
final originalPhenotypeText = context.l10n.drugs_page_original_phenotype(
thirdPerson
? context.l10n.drugs_page_inhibitor_third_person_salutation_genitive
: context.l10n.drugs_page_inhibitor_direct_salutation_genitive,
originalPhenotype,
);
return PhenotypeInformation(
phenotype: overwritePhenotype,
adaptionText: context.l10n.drugs_page_strong_inhibitors(
strongInhibitorTextPrefix,
userSalutation,
enumerationWithAnd(activeInhibitors, context),
),
overwrittenPhenotypeText: originalPhenotypeText,
);
}

static String? variantFor(String genotypeKey) =>
UserData.instance.genotypeResults?[genotypeKey]?.variant;

static String? allelesTestedFor(String genotypeKey) =>
UserData.instance.genotypeResults?[genotypeKey]?.allelesTested;

static MapEntry<String, String>? overwrittenLookup(
String gene,
{ String? drug }
) {
final inhibitors = strongDrugInhibitors[gene];
if (inhibitors == null) return null;
final lookup = inhibitors.entries.firstWhereOrNull((entry) {
final isActiveInhibitor =
UserData.instance.activeDrugNames?.contains(entry.key) ?? false;
final wouldInhibitItself = drug == entry.key;
return isActiveInhibitor && !wouldInhibitItself;
});
if (lookup == null) return null;
return lookup;
}

static String? lookupFor(
String genotypeKey,
{
Expand All @@ -129,22 +56,12 @@ class UserData {
}
) {
final overwrittenLookup =
UserData.overwrittenLookup(genotypeKey, drug: drug);
getOverwrittenLookup(genotypeKey, drug: drug);
if (useOverwrite && overwrittenLookup != null) {
return overwrittenLookup.value;
}
return UserData.instance.genotypeResults?[genotypeKey]?.lookupkey;
}

static List<String> activeInhibitorsFor(String gene, { String? drug }) {
return UserData.instance.activeDrugNames == null
? <String>[]
: UserData.instance.activeDrugNames!.filter(
(activeDrug) =>
inhibitorsFor(gene).contains(activeDrug) &&
activeDrug != drug
).toList();
}
}

// Wrapper of UserData.instance.activeDrugNames that manages changes; used to
Expand Down Expand Up @@ -229,30 +146,3 @@ List<String> activeDrugsFromHTTPResponse(Response resp) {
}
return activeDrugs;
}

String possiblyAdaptedPhenotype(GenotypeResult genotypeResult) {
final originalPhenotype = genotypeResult.phenotypeDisplayString;
if (!isInhibited(genotypeResult)) {
return originalPhenotype;
}
final overwrittenLookup = UserData.overwrittenLookup(genotypeResult.gene);
if (overwrittenLookup == null) {
return '$originalPhenotype$drugInteractionIndicator';
}
return '$overwritePhenotype$drugInteractionIndicator';
}

bool isInhibited(
GenotypeResult genotypeResult,
{ String? drug }
) {
final activeInhibitors = UserData.activeInhibitorsFor(
genotypeResult.gene,
drug: drug,
);
final originalPhenotype = genotypeResult.phenotypeDisplayString;
final phenotypeCanBeInhibited =
originalPhenotype.toLowerCase() != overwritePhenotype.toLowerCase();
return activeInhibitors.isNotEmpty && phenotypeCanBeInhibited;
}

2 changes: 1 addition & 1 deletion app/lib/common/utilities/pdf_utils.dart
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ List<pw.Widget> _buildDrugPart(Drug drug, BuildContext buildContext) {
}

String? _getPhenotypeInfo(String genotypeKey, Drug drug, BuildContext context) {
final phenotypeInformation = UserData.phenotypeInformationFor(
final phenotypeInformation = phenotypeInformationFor(
UserData.instance.genotypeResults!.findOrMissing(genotypeKey, context),
context,
drug: drug.name,
Expand Down
2 changes: 1 addition & 1 deletion app/lib/drug/widgets/annotation_cards/guideline.dart
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,7 @@ class GuidelineAnnotationCard extends StatelessWidget {
);
} else {
final geneDescriptions = drug.guidelineGenotypes.map((genotypeKey) {
final phenotypeInformation = UserData.phenotypeInformationFor(
final phenotypeInformation = phenotypeInformationFor(
UserData.instance.genotypeResults!.findOrMissing(
genotypeKey,
context,
Expand Down

0 comments on commit fe8c73b

Please sign in to comment.