aboutsummaryrefslogtreecommitdiff
path: root/src/utils/common.ts
diff options
context:
space:
mode:
authorIvan Chen <ivan@tagg.id>2021-06-02 14:54:05 -0400
committerIvan Chen <ivan@tagg.id>2021-06-02 14:54:05 -0400
commit06c1e5674a2e77bfa22048b4d559949403d30e0e (patch)
treed1f85e8abb0904cfb17e2e7bffb1c198ced8b6cd /src/utils/common.ts
parent21bd2597b72c8ba8246b98e72fe45ba373046a7f (diff)
Improve util code
Diffstat (limited to 'src/utils/common.ts')
-rw-r--r--src/utils/common.ts39
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],
+ }));
};