Compare commits
2 Commits
f9e1495fc3
...
e11609990d
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e11609990d | ||
|
|
e121cc2d05 |
@@ -14,9 +14,15 @@ export const useFavoriteRepos = () => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const savedFavoriteRepos = computed(() =>
|
const savedFavoriteRepos = computed(() => {
|
||||||
savedRepos.value.filter((repo) => repo.isFavorite)
|
const seen = new Map<string, FavoriteRepo>()
|
||||||
)
|
for (const repo of savedRepos.value) {
|
||||||
|
if (repo.isFavorite && !seen.has(repo.name)) {
|
||||||
|
seen.set(repo.name, repo)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return [...seen.values()]
|
||||||
|
})
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getFavorites()
|
getFavorites()
|
||||||
|
|||||||
@@ -1,31 +1,38 @@
|
|||||||
import { computed } from "vue"
|
import { computed } from "vue"
|
||||||
|
|
||||||
|
import { DataType } from "@/data/DataType.enum"
|
||||||
import { useRepos } from "@/hooks/useRepos.hook"
|
import { useRepos } from "@/hooks/useRepos.hook"
|
||||||
import { useFavoriteRepos } from "@/modules/repo/hooks/useFavoriteRepos.hook"
|
import { useFavoriteRepos } from "@/modules/repo/hooks/useFavoriteRepos.hook"
|
||||||
import { RepoBase } from "@/modules/repo/interfaces/RepoBase"
|
import { RepoBase } from "@/modules/repo/interfaces/RepoBase"
|
||||||
|
|
||||||
|
const FAVORITE_ID_PREFIX = `${DataType.FavoriteRepo}-`
|
||||||
|
|
||||||
export const useRepoList = () => {
|
export const useRepoList = () => {
|
||||||
const { savedFavoriteRepos, addFavorite, removeFavorite } = useFavoriteRepos()
|
const { savedFavoriteRepos, addFavorite, removeFavorite } = useFavoriteRepos()
|
||||||
const { repos, canLoadMore, loadMore } = useRepos()
|
const { repos, canLoadMore, loadMore } = useRepos()
|
||||||
|
|
||||||
const favoriteRepos = computed(() => {
|
const favoriteRepos = computed<RepoBase[]>(() =>
|
||||||
return repos.value.filter((repo) =>
|
savedFavoriteRepos.value.map((fav) => ({
|
||||||
savedFavoriteRepos.value.find(
|
id: fav._id?.startsWith(FAVORITE_ID_PREFIX)
|
||||||
(fav) => fav._id?.includes(repo.id) ?? false
|
? fav._id.slice(FAVORITE_ID_PREFIX.length)
|
||||||
|
: (fav._id ?? ""),
|
||||||
|
name: fav.name,
|
||||||
|
isPrivate: fav.isPrivate
|
||||||
|
}))
|
||||||
)
|
)
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|
||||||
const otherRepos = computed(() => {
|
|
||||||
return repos.value.filter(
|
|
||||||
(repo) => !favoriteRepos.value.find((favorite) => favorite.id === repo.id)
|
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|
||||||
const favoriteCheckboxes = computed(() =>
|
const favoriteCheckboxes = computed(() =>
|
||||||
favoriteRepos.value.map((favorite) => favorite.id)
|
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) => {
|
const toggleCheckbox = async (repo: RepoBase) => {
|
||||||
if (favoriteCheckboxes.value.includes(repo.id)) {
|
if (favoriteCheckboxes.value.includes(repo.id)) {
|
||||||
await removeFavorite(repo)
|
await removeFavorite(repo)
|
||||||
|
|||||||
Reference in New Issue
Block a user