File size: 3,355 Bytes
b965e2b
80ea539
b965e2b
d160b97
 
 
1f122c3
 
80ea539
1f122c3
80ea539
 
 
 
1f122c3
 
f62b8d3
1f122c3
 
 
f62b8d3
1f122c3
 
b965e2b
 
 
 
80ea539
 
b965e2b
 
 
 
 
1f122c3
d160b97
 
1f122c3
 
 
 
f62b8d3
93f8352
f27679f
f62b8d3
d160b97
 
f62b8d3
1f122c3
f62b8d3
 
 
 
 
 
 
1f122c3
 
93f8352
 
 
1f122c3
 
d160b97
 
 
 
 
 
 
 
 
 
 
80ea539
 
 
 
 
 
 
 
 
 
1f122c3
 
f62b8d3
f27679f
 
93f8352
1f122c3
d160b97
 
 
 
 
 
f27679f
 
 
 
 
 
d160b97
80ea539
 
d160b97
 
93f8352
f27679f
93f8352
d160b97
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import { useState } from "react"
import dynamic from "next/dynamic"

import { RiCheckboxCircleFill } from "react-icons/ri"
import { IoAdd } from "react-icons/io5"

import { cn } from "@/lib/utils"
import { ChannelInfo } from "@/types"
import { isCertifiedUser } from "@/app/certification"

const DefaultAvatar = dynamic(() => import("../default-avatar"), {
  loading: () => null,
})
 
export function ChannelCard({
  channel,
  onClick,
  className = "",
}: {
  channel: ChannelInfo
  onClick?: (channel: ChannelInfo) => void
  className?: string
 }) {
  const [channelThumbnail, setChannelThumbnail] = useState(channel.thumbnail)

  const handleBadChannelThumbnail = () => {
    try {
      if (channelThumbnail) {
        setChannelThumbnail("")
      }
    } catch (err) {
      
    }
  }

  const isCreateButton = !channel.id

  return (
  <div
    className={cn(
      `flex flex-col`,
      `items-center justify-center`,
      `space-y-1`,
      `w-52 h-52`,
      `rounded-lg`,
      `text-neutral-100/80`,
      isCreateButton ? '' : `hover:bg-neutral-800/30 hover:text-neutral-100/100`,
      `cursor-pointer`,
      className,
    )}
    onClick={() => {
      if (onClick) {
        onClick(channel)
      }
    }}
    >
      <div
        className={cn(
          `flex flex-col items-center justify-center`,
          `rounded-full overflow-hidden`,
          `w-26 h-26`
        )}
      >
        {isCreateButton
        ? <div className={cn(
          `flex flex-col justify-center items-center text-center`,
          `w-full h-full rounded-full`,
          `bg-neutral-700 hover:bg-neutral-600`,
          `border-2 border-neutral-400 hover:border-neutral-300`
          )}>
            <IoAdd className="w-8 h-8" />
          </div>
        : channelThumbnail
        ? <img
            src={channelThumbnail}
            onError={handleBadChannelThumbnail}
          />
        : <DefaultAvatar
          username={channel.datasetUser}
          bgColor="#fde047"
          textColor="#1c1917"
          width={104}
          roundShape
        />}
      </div>

      <div className={cn(
        `flex flex-col`,
         `items-center justify-center text-center`,
         `space-y-1`
      )}>
        <div className={cn(
          `text-center text-base font-medium text-zinc-100`,
          isCreateButton ? 'mt-2' : ''
        )}>{
          isCreateButton ? "Create a channel" : channel.label
        }</div>
        {/*<div className="text-center text-sm font-semibold">
          by <a href={
            `https://huggingface.co/${channel.datasetUser}`
          } target="_blank">@{channel.datasetUser}</a>
        </div>
        */}
        {!isCreateButton && <div className="flex flex-row items-center space-x-0.5">
          <div className="flex flex-row items-center text-center text-xs font-medium">@{channel.datasetUser}</div>
          {isCertifiedUser(channel.datasetUser) ? <div className="text-xs text-neutral-400"><RiCheckboxCircleFill className="" /></div> : null}
        </div>}
        {!isCreateButton && <div className="flex flex-row items-center justify-center text-neutral-400">
          <div className="text-center text-xs">{0} videos</div>
          <div className="px-1">-</div>
          <div className="text-center text-xs">{channel.likes} likes</div>
        </div>}
      </div>
    </div>
  )
}