File size: 1,102 Bytes
f27679f
 
a64395a
1f122c3
 
f42b4a1
3d4392e
f42b4a1
1f122c3
f62b8d3
a64395a
1f122c3
a3f1817
 
a64395a
1f122c3
a64395a
 
 
 
 
a3f1817
a64395a
 
a3f1817
a64395a
 
1f122c3
a64395a
 
 
1f122c3
 
f27679f
a64395a
93f8352
a3f1817
1f122c3
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
"use client"

import { useEffect, useState, useTransition } from "react"

import { useStore } from "@/app/state/useStore"
import { cn } from "@/lib/utils/cn"
import { getChannels } from "@/app/api/actions/ai-tube-hf/getChannels"
import { ChannelList } from "@/components/interface/channel-list"

export function PublicChannelsView() {
  const [_isPending, startTransition] = useTransition()

  const publicChannels = useStore(s => s.publicChannels)
  const setPublicChannels = useStore(s => s.setPublicChannels)
  const [isLoaded, setLoaded] = useState(false)

  useEffect(() => {
    if (!isLoaded) {
      startTransition(async () => {
        try {
          const channels = await getChannels()
          setPublicChannels(channels)
        } catch (err) {
          console.error("failed to load the public channels", err)
          setPublicChannels([])
        } finally {
          setLoaded(true)
        }
      })
    }
  }, [isLoaded])

  return (
    <div className={cn(`flex flex-col`)}>
      <ChannelList
        layout="grid"
        channels={publicChannels}
      />
    </div>
  )
}