File size: 3,610 Bytes
b965e2b
 
d160b97
 
 
f42b4a1
1185ec1
80ea539
e4d3d8a
f42b4a1
1f122c3
 
 
f62b8d3
1f122c3
 
 
f62b8d3
1f122c3
 
b965e2b
 
 
 
80ea539
 
b965e2b
 
 
 
 
1f122c3
d160b97
 
1f122c3
b161bd3
1f122c3
 
b161bd3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1f122c3
b161bd3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1f122c3
d160b97
b161bd3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
139ef57
b161bd3
139ef57
b161bd3
f27679f
1f122c3
b161bd3
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
import { useState } from "react"

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

import { cn } from "@/lib/utils/cn"
import { ChannelInfo } from "@/types/general"
import { isCertifiedUser } from "@/app/certification"
import { DefaultAvatar } from "../default-avatar"
import { formatLargeNumber } from "@/lib/formatters/formatLargeNumber"

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 (
    // <Link href={`/channel?c=${channel.id}`}>
      <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">{formatLargeNumber(0)} videos</div>
            <div className="px-1">-</div>
            <div className="text-center text-xs">{formatLargeNumber(channel.likes)} likes</div>
          </div>}
        </div>
      </div>
    // </Link>
  )
}