diff options
author | Ivan Chen <ivan@tagg.id> | 2021-06-02 14:54:05 -0400 |
---|---|---|
committer | Ivan Chen <ivan@tagg.id> | 2021-06-02 14:54:05 -0400 |
commit | 06c1e5674a2e77bfa22048b4d559949403d30e0e (patch) | |
tree | d1f85e8abb0904cfb17e2e7bffb1c198ced8b6cd /src/utils/common.ts | |
parent | 21bd2597b72c8ba8246b98e72fe45ba373046a7f (diff) |
Improve util code
Diffstat (limited to 'src/utils/common.ts')
-rw-r--r-- | src/utils/common.ts | 39 |
1 files changed, 22 insertions, 17 deletions
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<string> = new Set(badges.map((b) => b.category + b.name)); + const badgeToImgMap: Record<string, ImageSourcePropType> = {}; + 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 <UniversityBadgeDisplayType[]>badges.map((b) => ({ + ...b, + img: badgeToImgMap[b.category + b.name], + })); }; |