Skip to content

Commit

Permalink
Abstract reusable logic into utility functions with added documentation
Browse files Browse the repository at this point in the history
  • Loading branch information
Jcheng777 committed Dec 8, 2024
1 parent c89d851 commit 3403deb
Showing 3 changed files with 62 additions and 119 deletions.
70 changes: 10 additions & 60 deletions game/lib/challenges/challenges_page.dart
Original file line number Diff line number Diff line change
@@ -135,70 +135,20 @@ class _ChallengesPageState extends State<ChallengesPage> {
final challengeLocation =
challenge.location?.name ?? "";

bool eventMatchesDifficultySelection = true;
bool eventMatchesCategorySelection = true;
bool eventMatchesLocationSelection = true;
bool eventMatchesSearchText = true;
String? searchTerm = widget.mySearchText;
bool eventMatchesFiltersResult = eventMatchesFilters(
event: event,
difficulty: widget.myDifficulty,
locations: widget.myLocations,
categories: widget.myCategories,
searchText: widget.mySearchText,
challengeLocation: challengeLocation,
);

if (widget.myDifficulty?.length == 0 ||
widget.myDifficulty == event.difficulty?.name)
eventMatchesDifficultySelection = true;
else
eventMatchesDifficultySelection = false;

if (widget.myLocations?.isNotEmpty ?? false) {
if (widget.myLocations?.contains(challengeLocation) ??
false)
eventMatchesLocationSelection = true;
else
eventMatchesLocationSelection = false;
} else
eventMatchesLocationSelection = true;

if (widget.myCategories?.isNotEmpty ?? false) {
if (widget.myCategories
?.contains(event.category?.name) ??
false)
eventMatchesCategorySelection = true;
else
eventMatchesCategorySelection = false;
} else
eventMatchesCategorySelection = true;

if (searchTerm?.length == 0) {
eventMatchesSearchText = true;
} else {
// search term length > 0
if (searchTerm != null &&
challengeLocation
.toLowerCase()
.contains(searchTerm.toLowerCase())) {
eventMatchesSearchText = true;
} else {
eventMatchesSearchText = false;
if (searchTerm != null &&
(event.name ?? "")
.toLowerCase()
.contains(searchTerm.toLowerCase())) {
eventMatchesSearchText = true;
} else
eventMatchesSearchText = false;
}
}

var imageUrl = challenge.imageUrl;
if (imageUrl == null || imageUrl.length == 0) {
imageUrl =
"https://upload.wikimedia.org/wikipedia/commons/b/b1/Missing-image-232x150.png";
}
var imageUrl = getValidImageUrl(challenge.imageUrl);

if (!complete &&
!timeTillExpire.isNegative &&
eventMatchesDifficultySelection &&
eventMatchesCategorySelection &&
eventMatchesLocationSelection &&
eventMatchesSearchText) {
eventMatchesFiltersResult) {
eventData.add(ChallengeCellDto(
location:
friendlyLocation[challenge.location] ?? "",
69 changes: 10 additions & 59 deletions game/lib/journeys/journeys_page.dart
Original file line number Diff line number Diff line change
@@ -159,70 +159,21 @@ class _JourneysPageState extends State<JourneysPage> {
Duration timeTillExpire = endtime.difference(now);

final challengeLocation = challenge.location?.name ?? "";
final challengeName = challenge.name ?? "";

bool eventMatchesDifficultySelection = true;
bool eventMatchesCategorySelection = true;
bool eventMatchesLocationSelection = true;
bool eventMatchesSearchText = true;
String? searchTerm = widget.mySearchText;
bool eventMatchesFiltersResult = eventMatchesFilters(
event: event,
difficulty: widget.myDifficulty,
locations: widget.myLocations,
categories: widget.myCategories,
searchText: widget.mySearchText,
challengeLocation: challengeLocation,
);

if (searchTerm?.length == 0) {
eventMatchesSearchText = true;
if (widget.myDifficulty?.length == 0 ||
widget.myDifficulty == event.difficulty?.name)
eventMatchesDifficultySelection = true;
else
eventMatchesDifficultySelection = false;

if (widget.myLocations?.isNotEmpty ?? false) {
if (widget.myLocations?.contains(challengeLocation) ??
false)
eventMatchesLocationSelection = true;
else
eventMatchesLocationSelection = false;
} else
eventMatchesLocationSelection = true;

if (widget.myCategories?.isNotEmpty ?? false) {
if (widget.myCategories
?.contains(event.category?.name) ??
false)
eventMatchesCategorySelection = true;
else
eventMatchesCategorySelection = false;
} else
eventMatchesCategorySelection = true;
} else {
if (searchTerm != null &&
challengeLocation
.toLowerCase()
.contains(searchTerm.toLowerCase())) {
eventMatchesSearchText = true;
} else {
eventMatchesSearchText = false;
if (searchTerm != null &&
challengeName
.toLowerCase()
.contains(searchTerm.toLowerCase())) {
eventMatchesSearchText = true;
} else
eventMatchesSearchText = false;
}
}

var imageUrl = challenge.imageUrl;
if (imageUrl == null || imageUrl.length == 0) {
imageUrl =
"https://upload.wikimedia.org/wikipedia/commons/b/b1/Missing-image-232x150.png";
}
var imageUrl = getValidImageUrl(challenge.imageUrl);

if (!complete &&
!timeTillExpire.isNegative &&
eventMatchesDifficultySelection &&
eventMatchesCategorySelection &&
eventMatchesLocationSelection &&
eventMatchesSearchText) {
eventMatchesFiltersResult) {
eventData.add(JourneyCellDto(
location: friendlyLocation[challenge.location] ?? "",
name: event.name ?? "",
42 changes: 42 additions & 0 deletions game/lib/utils/utility_functions.dart
Original file line number Diff line number Diff line change
@@ -206,3 +206,45 @@ final Map<EventCategoryDto, String> friendlyCategory = {
EventCategoryDto.HISTORICAL: "Historical",
EventCategoryDto.NATURE: "Nature",
};

/// Matches an event based on difficulty, location, category, and search text
bool eventMatchesFilters({
required EventDto event,
required String? difficulty,
required List<String>? locations,
required List<String>? categories,
required String? searchText,
required String challengeLocation,
}) {
// Check difficulty
final matchesDifficulty =
(difficulty?.length ?? 0) == 0 || difficulty == event.difficulty?.name;

// Check locations
final matchesLocation = locations == null ||
locations.isEmpty ||
locations.contains(challengeLocation);

// Check categories
final matchesCategory = categories == null ||
categories.isEmpty ||
categories.contains(event.category?.name);

// Check search text
final searchTerm = searchText?.toLowerCase() ?? '';
final matchesSearch = searchTerm.isEmpty ||
challengeLocation.toLowerCase().contains(searchTerm) ||
(event.name ?? "").toLowerCase().contains(searchTerm);

return matchesDifficulty &&
matchesLocation &&
matchesCategory &&
matchesSearch;
}

/// Returns a valid image URL or a default placeholder if the input is null or empty
String getValidImageUrl(String? imageUrl) {
return (imageUrl == null || imageUrl.isEmpty)
? "https://upload.wikimedia.org/wikipedia/commons/b/b1/Missing-image-232x150.png"
: imageUrl;
}

0 comments on commit 3403deb

Please sign in to comment.