diff --git a/src/modules/repo/hooks/useRepoList.hook.ts b/src/modules/repo/hooks/useRepoList.hook.ts index fd9200e..4e4a7db 100644 --- a/src/modules/repo/hooks/useRepoList.hook.ts +++ b/src/modules/repo/hooks/useRepoList.hook.ts @@ -1,31 +1,38 @@ import { computed } from "vue" +import { DataType } from "@/data/DataType.enum" import { useRepos } from "@/hooks/useRepos.hook" import { useFavoriteRepos } from "@/modules/repo/hooks/useFavoriteRepos.hook" import { RepoBase } from "@/modules/repo/interfaces/RepoBase" +const FAVORITE_ID_PREFIX = `${DataType.FavoriteRepo}-` + export const useRepoList = () => { const { savedFavoriteRepos, addFavorite, removeFavorite } = useFavoriteRepos() const { repos, canLoadMore, loadMore } = useRepos() - const favoriteRepos = computed(() => { - return repos.value.filter((repo) => - savedFavoriteRepos.value.find( - (fav) => fav._id?.includes(repo.id) ?? false - ) - ) - }) - - const otherRepos = computed(() => { - return repos.value.filter( - (repo) => !favoriteRepos.value.find((favorite) => favorite.id === repo.id) - ) - }) + const favoriteRepos = computed(() => + savedFavoriteRepos.value.map((fav) => ({ + id: fav._id?.startsWith(FAVORITE_ID_PREFIX) + ? fav._id.slice(FAVORITE_ID_PREFIX.length) + : (fav._id ?? ""), + name: fav.name, + isPrivate: fav.isPrivate + })) + ) const favoriteCheckboxes = computed(() => favoriteRepos.value.map((favorite) => favorite.id) ) + const otherRepos = computed(() => { + const starredIds = new Set(favoriteCheckboxes.value) + const starredNames = new Set(favoriteRepos.value.map((r) => r.name)) + return repos.value.filter( + (repo) => !starredIds.has(repo.id) && !starredNames.has(repo.name) + ) + }) + const toggleCheckbox = async (repo: RepoBase) => { if (favoriteCheckboxes.value.includes(repo.id)) { await removeFavorite(repo)