diff options
| -rw-r--r-- | src/graphql/user/schema.graphql | 4 | ||||
| -rw-r--r-- | src/routes/user/[user]/+page.gql | 7 | ||||
| -rw-r--r-- | src/routes/user/[user]/+page.server.ts | 5 | ||||
| -rw-r--r-- | src/routes/user/[user]/+page.svelte | 29 | ||||
| -rw-r--r-- | src/routes/user/[user]/+page.ts | 19 |
5 files changed, 41 insertions, 23 deletions
diff --git a/src/graphql/user/schema.graphql b/src/graphql/user/schema.graphql index d4360a39..942ee72d 100644 --- a/src/graphql/user/schema.graphql +++ b/src/graphql/user/schema.graphql @@ -1,10 +1,10 @@ type Query { - User(id: Int!): User + User(id: Int!): User! } type User { id: Int! - badges: [Badge] + badges: [Badge]! } type Badge { diff --git a/src/routes/user/[user]/+page.gql b/src/routes/user/[user]/+page.gql new file mode 100644 index 00000000..182969e2 --- /dev/null +++ b/src/routes/user/[user]/+page.gql @@ -0,0 +1,7 @@ +query Profile($id: Int!) { + User(id: $id) { + badges { + id + } + } +}
\ No newline at end of file diff --git a/src/routes/user/[user]/+page.server.ts b/src/routes/user/[user]/+page.server.ts deleted file mode 100644 index 76d2d889..00000000 --- a/src/routes/user/[user]/+page.server.ts +++ /dev/null @@ -1,5 +0,0 @@ -export const load = ({ params }) => { - return { - username: params.user - }; -}; diff --git a/src/routes/user/[user]/+page.svelte b/src/routes/user/[user]/+page.svelte index 44e50df7..0369a920 100644 --- a/src/routes/user/[user]/+page.svelte +++ b/src/routes/user/[user]/+page.svelte @@ -2,7 +2,7 @@ import settings from '$stores/settings'; import ParallaxImage from '../../../lib/Image/ParallaxImage.svelte'; import { typeSchedule, type ParseResult } from '$lib/Hololive/hololive'; - import { user, type User } from '$lib/Data/AniList/user'; + import { type User } from '$lib/Data/AniList/user'; import HeadTitle from '$lib/Home/HeadTitle.svelte'; import Message from '$lib/Loading/Message.svelte'; import { estimatedDayReading } from '$lib/Media/Manga/time'; @@ -38,12 +38,9 @@ username } }).user.profile.badges; + $: ({ Profile } = data); - onMount(() => { - user(data.username, /^\d+$/.test(data.username)) - .then((profile) => (userData = profile)) - .catch(() => (error = true)); - }); + onMount(() => (userData = data.userData)); const handleDragStart = ( event: DragEvent & { currentTarget: EventTarget & HTMLDivElement }, @@ -252,19 +249,19 @@ <p /> {/if} - {#await fetch(root(`/api/badges?id=${userData.id}`))} + {#if $Profile.fetching} {displayBadges(userData.name, '...')} - {:then badges} - {#await badges.json()} - {displayBadges(userData.name, '...')} - {:then badges} - {displayBadges(userData.name, badges.length)} - {:catch} + {:else if $Profile.data} + {@const badges = $Profile.data.User.badges.length} + + {#if badges} + {displayBadges(userData.name, badges)} + {:else} {displayBadges(userData.name, '?')} - {/await} - {:catch} + {/if} + {:else} {displayBadges(userData.name, '?')} - {/await} + {/if} </div> </div> </div> diff --git a/src/routes/user/[user]/+page.ts b/src/routes/user/[user]/+page.ts new file mode 100644 index 00000000..9d498404 --- /dev/null +++ b/src/routes/user/[user]/+page.ts @@ -0,0 +1,19 @@ +import { load_Profile } from "$houdini" +import { user } from "$lib/Data/AniList/user" +import type { LoadEvent } from "@sveltejs/kit" + +export const load = async (event: LoadEvent) => { + const username = event.params.user as string + const userData = (await + user(username, /^\d+$/.test(username))) + + return { + ...(await load_Profile({ + event, variables: { + id: userData.id, + } + })), + username, + userData + } +}
\ No newline at end of file |