diff options
author | Leon Jiang <35908040+leonyjiang@users.noreply.github.com> | 2021-03-10 22:59:36 -0500 |
---|---|---|
committer | Leon Jiang <35908040+leonyjiang@users.noreply.github.com> | 2021-03-10 22:59:36 -0500 |
commit | 603b6e1e7afe464538aa1ab1b6ec9f892266d01b (patch) | |
tree | e22fc1ee0e6b7551a55ee0a7376b33ce49e4f885 | |
parent | 1d86e3dc7af3f5fc8f8269257b6d4d23836986e9 (diff) |
Refactor utils
-rw-r--r-- | src/utils/index.ts | 1 | ||||
-rw-r--r-- | src/utils/search.ts | 132 | ||||
-rw-r--r-- | src/utils/users.ts | 114 |
3 files changed, 133 insertions, 114 deletions
diff --git a/src/utils/index.ts b/src/utils/index.ts index 82c94100..739e6fb8 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -3,3 +3,4 @@ export * from './moments'; export * from './common'; export * from './users'; export * from './friends'; +export * from './search'; diff --git a/src/utils/search.ts b/src/utils/search.ts new file mode 100644 index 00000000..4293ff25 --- /dev/null +++ b/src/utils/search.ts @@ -0,0 +1,132 @@ +import AsyncStorage from '@react-native-community/async-storage'; + +import {BADGE_DATA} from '../constants/badges'; +import {ProfilePreviewType, CategoryPreviewType} from '../types'; + +/* + * Gets all possible search suggestions. + */ +export const getSearchSuggestions = (): string[] => { + const suggestions: string[] = []; + for (const category of BADGE_DATA) { + for (const interest of category.data) { + suggestions.push(interest.badgeName); + } + } + return suggestions; +}; + +/* + * AsyncStorage key for list of recently-searched users. + */ +const recentlySearchedUsersKey = '@recently_searched_users'; + +/* + * Stores `user` in AsyncStorage as a recently-searched user. + */ +export const addUserToRecentlySearched = async (user: ProfilePreviewType) => { + let users: ProfilePreviewType[]; + // retrieve and update recently-searched categories list + try { + const usersJSON = await AsyncStorage.getItem(recentlySearchedUsersKey); + if (usersJSON) { + users = JSON.parse(usersJSON); + // if category already exists, move it to the end + for (let i = 0; i < users.length; i++) { + // TODO: speed up comparison by adding some id field to category + if (users[i].id === user.id) { + users.splice(i, 1); + break; + } + } + users.push(user); + } else { + users = [user]; + } + // store updated list of recently-searched categories + try { + AsyncStorage.setItem(recentlySearchedUsersKey, JSON.stringify(users)); + } catch (e) { + console.log(e); + } + } catch (e) { + console.log(e); + } +}; + +/* + * Retrieves and returns user's recently-searched categories from AsyncStorage. + */ +export const getRecentlySearchedUsers = async (): Promise< + ProfilePreviewType[] +> => { + try { + const usersJSON = await AsyncStorage.getItem(recentlySearchedUsersKey); + if (usersJSON) return JSON.parse(usersJSON); + } catch (e) { + console.log(e); + } + return []; +}; + +/* + * AsyncStorage key for list of recently-searched categories. + */ +const recentlySearchedCategoriesKey = '@recently_searched_categories'; + +/* + * Stores `category` in AsyncStorage as a recently-searched category. + */ +export const addCategoryToRecentlySearched = async ( + category: CategoryPreviewType, +) => { + let categories: CategoryPreviewType[]; + // retrieve and update recently-searched categories list + try { + const categoriesJSON = await AsyncStorage.getItem( + recentlySearchedCategoriesKey, + ); + if (categoriesJSON) { + categories = JSON.parse(categoriesJSON); + // if category already exists, move it to the end + for (let i = 0; i < categories.length; i++) { + // TODO: speed up comparison by adding some id field to category + if (categories[i].name === category.name) { + categories.splice(i, 1); + break; + } + } + categories.push(category); + } else { + categories = [category]; + } + // store updated list of recently-searched categories + try { + AsyncStorage.setItem( + recentlySearchedCategoriesKey, + JSON.stringify(categories), + ); + } catch (e) { + console.log(e); + } + } catch (e) { + console.log(e); + } +}; + +/* + * Retrieves and returns user's recently-searched categories from AsyncStorage. + */ +export const getRecentlySearchedCategories = async (): Promise< + CategoryPreviewType[] +> => { + try { + const categoriesJSON = await AsyncStorage.getItem( + '@recently_searched_categories', + ); + if (categoriesJSON) return JSON.parse(categoriesJSON); + } catch (e) { + console.log(e); + } + return []; +}; diff --git a/src/utils/users.ts b/src/utils/users.ts index 3e0d9eef..af4f3813 100644 --- a/src/utils/users.ts +++ b/src/utils/users.ts @@ -166,117 +166,3 @@ export const defaultUserProfile = () => { return defaultImage; }; -/* - * AsyncStorage key for list of recently-searched users. - */ -const recentlySearchedUsersKey = '@recently_searched_users'; - -/* - * Stores `user` in AsyncStorage as a recently-searched user. - */ -export const addUserToRecentlySearched = async (user: ProfilePreviewType) => { - let users: ProfilePreviewType[]; - // retrieve and update recently-searched categories list - try { - const usersJSON = await AsyncStorage.getItem(recentlySearchedUsersKey); - if (usersJSON) { - users = JSON.parse(usersJSON); - // if category already exists, move it to the end - for (let i = 0; i < users.length; i++) { - // TODO: speed up comparison by adding some id field to category - if (users[i].id === user.id) { - users.splice(i, 1); - break; - } - } - users.push(user); - } else { - users = [user]; - } - // store updated list of recently-searched categories - try { - AsyncStorage.setItem(recentlySearchedUsersKey, JSON.stringify(users)); - } catch (e) { - console.log(e); - } - } catch (e) { - console.log(e); - } -}; - -/* - * Retrieves and returns user's recently-searched categories from AsyncStorage. - */ -export const getRecentlySearchedUsers = async (): Promise< - ProfilePreviewType[] -> => { - try { - const usersJSON = await AsyncStorage.getItem(recentlySearchedUsersKey); - if (usersJSON) return JSON.parse(usersJSON); - } catch (e) { - console.log(e); - } - return []; -}; - -/* - * AsyncStorage key for list of recently-searched categories. - */ -const recentlySearchedCategoriesKey = '@recently_searched_categories'; - -/* - * Stores `category` in AsyncStorage as a recently-searched category. - */ -export const addCategoryToRecentlySearched = async ( - category: CategoryPreviewType, -) => { - let categories: CategoryPreviewType[]; - // retrieve and update recently-searched categories list - try { - const categoriesJSON = await AsyncStorage.getItem( - recentlySearchedCategoriesKey, - ); - if (categoriesJSON) { - categories = JSON.parse(categoriesJSON); - // if category already exists, move it to the end - for (let i = 0; i < categories.length; i++) { - // TODO: speed up comparison by adding some id field to category - if (categories[i].name === category.name) { - categories.splice(i, 1); - break; - } - } - categories.push(category); - } else { - categories = [category]; - } - // store updated list of recently-searched categories - try { - AsyncStorage.setItem( - recentlySearchedCategoriesKey, - JSON.stringify(categories), - ); - } catch (e) { - console.log(e); - } - } catch (e) { - console.log(e); - } -}; - -/* - * Retrieves and returns user's recently-searched categories from AsyncStorage. - */ -export const getRecentlySearchedCategories = async (): Promise< - CategoryPreviewType[] -> => { - try { - const categoriesJSON = await AsyncStorage.getItem( - '@recently_searched_categories', - ); - if (categoriesJSON) return JSON.parse(categoriesJSON); - } catch (e) { - console.log(e); - } - return []; -}; |