Skip to content

Commit

Permalink
Merge pull request #39477 from abzokhattab/optimize-get-personal-deta…
Browse files Browse the repository at this point in the history
…il-by-email-using-key-value-pair-object

Optimizing `getPersonalDetailByEmail` using key-value pair object mapping
  • Loading branch information
luacmartins authored Apr 5, 2024
2 parents 0e6dba4 + dcaca33 commit 6ab0b2d
Showing 1 changed file with 8 additions and 1 deletion.
9 changes: 8 additions & 1 deletion src/libs/PersonalDetailsUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,18 @@ type FirstAndLastName = {

let personalDetails: Array<PersonalDetails | null> = [];
let allPersonalDetails: OnyxEntry<PersonalDetailsList> = {};
let emailToPersonalDetailsCache: Record<string, PersonalDetails> = {};
Onyx.connect({
key: ONYXKEYS.PERSONAL_DETAILS_LIST,
callback: (val) => {
personalDetails = Object.values(val ?? {});
allPersonalDetails = val;
emailToPersonalDetailsCache = personalDetails.reduce((acc: Record<string, PersonalDetails>, detail) => {
if (detail?.login) {
acc[detail.login.toLowerCase()] = detail;
}
return acc;
}, {});
},
});

Expand Down Expand Up @@ -77,7 +84,7 @@ function getPersonalDetailsByIDs(accountIDs: number[], currentUserAccountID: num
}

function getPersonalDetailByEmail(email: string): PersonalDetails | undefined {
return (Object.values(allPersonalDetails ?? {}) as PersonalDetails[]).find((detail) => detail?.login === email);
return emailToPersonalDetailsCache[email.toLowerCase()];
}

/**
Expand Down

0 comments on commit 6ab0b2d

Please sign in to comment.