Fix translation and add infinte scroll onto the following streams page

This commit is contained in:
dragongoose 2024-02-04 21:12:26 -05:00
parent 0fd1dd2247
commit 44779e3e6d
No known key found for this signature in database
GPG Key ID: 01397EEC371CDAA5
2 changed files with 30 additions and 16 deletions

View File

@ -95,25 +95,28 @@ export function getTimeFromQuery(query: string) {
* Returns a string of online streamers from a * Returns a string of online streamers from a
* array of string of the request streamers * array of string of the request streamers
* @param streamers the array of streamers * @param streamers the array of streamers
* @param cursor which 35 streamer chunk to fetch
* @returns the streamers in that list that are online * @returns the streamers in that list that are online
*/ */
export async function followersStreaming(streamers: string[]): Promise<string[]> { export async function followersStreaming(streamers: string[], cursor: number): Promise<string[]> {
// do not make request if no followers // do not make request if no followers
if (streamers.length == 0) { if (streamers.length == 0) {
return [] return []
} }
let data: string[] = [] let res: string[] = []
const payloadData = streamers.slice(cursor, cursor + 35)
const payload = { const payload = {
streamers streamers: payloadData
} }
await postEndpoint('api/users/isLive/bulk', payload) await postEndpoint('api/users/isLive/bulk', payload)
.then((res: string[]) => { .then((data: string[]) => {
data = res res = [...res, ...data]
}) })
return res
return data
} }

View File

@ -66,6 +66,17 @@ export default {
this.data.push(category) this.data.push(category)
} }
} }
},
async handleFollowingScroll(event: UIEvent) {
let el = event.target as HTMLUListElement
let fullyScrolled = el.scrollLeft === (el.scrollWidth - el.clientWidth)
console.log(el)
if (!fullyScrolled) return;
if (!this.following) return;
let offset = this.following.length / 35
let newFollowers = await followersStreaming(getFollows(), offset)
this.following = [ ...this.following, ...newFollowers]
} }
}, },
async mounted() { async mounted() {
@ -80,7 +91,7 @@ export default {
this.data = data this.data = data
}) })
this.following = await followersStreaming(getFollows()) this.following = await followersStreaming(getFollows(), 0)
}, },
components: { components: {
StreamPreviewVue, StreamPreviewVue,
@ -92,14 +103,14 @@ export default {
</script> </script>
<template> <template>
<loading-screen v-if="!data && status != 'error'"></loading-screen> <loading-screen v-show="!data && status != 'error'"></loading-screen>
<error-message v-else-if="status == 'error'"></error-message> <error-message v-show="status == 'error'"></error-message>
<div v-else-if="data" class="max-w-5xl mx-auto"> <div v-show="data" class="max-w-5xl mx-auto">
<div v-if="following && following.length > 0" class="p-2 text-contrast w-[100vw]"> <div v-if="following && following.length > 0" class="p-2 text-contrast">
<h1 class="font-bold text-5xl">Following</h1> <h1 class="font-bold text-5xl">{{ $t("home.following") }}</h1>
<p class="text-xl">Streamers you follow</p> <p class="text-xl">{{ $t("home.streamersYouFollow") }}</p>
<ul class="flex flex-nowrap justify-begin overflow-x-scroll overflow-y-hidden space-x-2 mt-1 h-[19rem] items-center"> <ul class="flex flex-nowrap justify-begin overflow-x-scroll overflow-y-hidden space-x-2 mt-1 h-[19rem] items-center" @scroll="handleFollowingScroll">
<li v-for="streamer in following" :key="streamer" class="inline-block"> <li v-for="streamer in following" :key="streamer" class="inline-block">
<stream-preview-vue :name="streamer"></stream-preview-vue> <stream-preview-vue :name="streamer"></stream-preview-vue>
</li> </li>