From 06c1e5674a2e77bfa22048b4d559949403d30e0e Mon Sep 17 00:00:00 2001 From: Ivan Chen Date: Wed, 2 Jun 2021 14:54:05 -0400 Subject: Improve util code --- src/utils/common.ts | 39 ++++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 17 deletions(-) (limited to 'src/utils') diff --git a/src/utils/common.ts b/src/utils/common.ts index 7e54eeaf..cfd9244a 100644 --- a/src/utils/common.ts +++ b/src/utils/common.ts @@ -1,6 +1,6 @@ import AsyncStorage from '@react-native-community/async-storage'; import moment from 'moment'; -import {Linking} from 'react-native'; +import {ImageSourcePropType, Linking} from 'react-native'; import {getAll} from 'react-native-contacts'; import { BADGE_DATA, @@ -205,26 +205,31 @@ export const validateImageLink = async (url: string | undefined) => { }; /** - * Turns a list badges into display badges (with img) by looking up the img source - * from our badge asset lookup constant. + * Turns a list of badges into display badges (just a badge with img) by + * looking up the img source from our badge asset lookup constant. + * + * WARNING: Assumes a small list of badges, complexity goes up exponentially. + * * @param badges list of university badges + * @param university university of which all the badges belong * @returns list of display badges */ -export const badgesToDisplayBadges = (badges: UniversityBadge[]) => { - const displayBadges: UniversityBadgeDisplayType[] = []; - badges.forEach((badge) => { - BADGE_DATA[badge.university].forEach((category) => { - if (category.title === badge.category) { - category.data.forEach((badgeInfo) => { - if (badgeInfo.badgeName === badge.name) { - displayBadges.push({ - ...badge, - img: badgeInfo.badgeImage, - }); - } - }); +export const badgesToDisplayBadges = ( + badges: UniversityBadge[], + university: UniversityType, +) => { + const badgeSet: Set = new Set(badges.map((b) => b.category + b.name)); + const badgeToImgMap: Record = {}; + BADGE_DATA[university].forEach((category) => { + category.data.forEach((badgeInfo) => { + const key = category.title + badgeInfo.badgeName; + if (badgeSet.has(key)) { + badgeToImgMap[key] = badgeInfo.badgeImage; } }); }); - return displayBadges; + return badges.map((b) => ({ + ...b, + img: badgeToImgMap[b.category + b.name], + })); }; -- cgit v1.2.3-70-g09d2