import { Avatar, Col, Row, Tooltip } from "antd"; import { Button } from "antd/lib/radio"; import { ContentImage } from "./Image"; import { CopyClipboardHashInput } from "./CopyClipboardHashInput"; import { Link } from "react-router-dom"; import { LoadMore } from "./LoadMore"; import { NLView } from "../types"; import { UserInvitationReadPublicResponse, UserReadPublicResponse } from "@newstackdev/iosdk-newgraph-client-js"; import { UserPowerup } from "./UserWidget"; import { VerifiedIcon } from "./Icons/VerifiedIcon"; import { useActions, useAppState } from "../overmind"; import { useCachedPool, useCachedUser } from "../hooks/useCached"; import { useState } from "react"; import { useVerified } from "../hooks/useVerified"; import BadgeWidget from "./BadgeWidget"; import CountUp from "react-countup"; import PowerupDialog from "../Components/PowerupDialog"; import Title from "../Pages/Explore/Title"; type ICreators = { title?: string; maxItems?: number; users: UserInvitationReadPublicResponse[]; buttonType?: string; setAddedUsers?: React.Dispatch>; addedUsers?: string[]; to?: string; newPowerup?: boolean; columns?: boolean; thumbnailOnly?: boolean; }; // export const Creator: NLView export const CreatorWidget: NLView<{ creator: UserInvitationReadPublicResponse; avatarClassName?: string; buttonType?: string; setAddedUsers: React.Dispatch; addedUsers: any; newPowerup?: boolean; thumbnailOnly?: boolean; }> = ({ creator, avatarClassName, buttonType, setAddedUsers, addedUsers, newPowerup = true, thumbnailOnly = false }) => { const state = useAppState(); const [activeButton, setActiveButton] = useState(false); const user = useCachedUser(creator); //TODO: use this later when we have infinite load const { verifiedUsers } = useVerified([creator.username || ""]); const isUserVerified = verifiedUsers && creator.username && verifiedUsers.includes(creator.username); avatarClassName = avatarClassName || "avatar-image-top-creators"; const buttonClassName = activeButton ? "primary-green-btn" : "secondary-button"; const buttonName = activeButton ? "Added!" : "Add"; const poolInfo = useCachedPool({ owner: creator?.username }); const symbol = poolInfo.code; return ( } className={avatarClassName} /> {!thumbnailOnly && (

{creator.username || creator.fullName} {isUserVerified ? ( ) : ( false )}

{state.routing.location === "/user/invite" && ( )}
)} {!thumbnailOnly && ( {creator.invitation && creator.invitation.hash && }

{/** */} {/**@ts-ignore */}

{buttonType === "addUser" ? ( ) : newPowerup ? (
e.preventDefault()}>
) : (
e.preventDefault()}>
)} )}
); }; export const CreatorsList: NLView = ({ title, maxItems, users, buttonType, addedUsers, setAddedUsers, to, newPowerup, columns, thumbnailOnly, }) => { users = maxItems ? users?.slice(0, Math.min(users?.length, maxItems)) : users; const t = users.find((creator) => creator.invitation) ? "My invited members" : "Explore top creators"; return ( <> {title === undefined && (

{t}

)} {thumbnailOnly ? ( <> {maxItems ? : <></>} {users?.map((creator) => ( <div> <CreatorWidget creator={creator} buttonType={buttonType} setAddedUsers={setAddedUsers!} addedUsers={addedUsers} newPowerup={newPowerup} thumbnailOnly={thumbnailOnly} /> </div> ))} </> ) : ( <div style={{ width: "100%" }}> {maxItems ? <Title title={title} href={to} /> : <></>} <div className={columns ? "top-creators-columns" : ""} style={title ? { display: "flex", flexWrap: "wrap" } : {}}> {users?.map((creator) => ( <div> <CreatorWidget creator={creator} buttonType={buttonType} setAddedUsers={setAddedUsers!} addedUsers={addedUsers} newPowerup={newPowerup} thumbnailOnly={thumbnailOnly} /> </div> ))} </div> </div> )} </> ); }; export const Creators: NLView<ICreators> = (props) => { return <CreatorsList {...props} />; }; export const TopCreators: NLView<ICreators> = ({ maxItems, title, buttonType, setAddedUsers, addedUsers, to }) => { const state = useAppState(); const actions = useActions(); const creators = maxItems ? state.lists.top.users.items.slice(0, maxItems) : state.lists.top.users.items; return ( <> <CreatorsList users={creators as (UserReadPublicResponse & { watts: number })[]} maxItems={maxItems} title={title} buttonType={buttonType} setAddedUsers={setAddedUsers} addedUsers={addedUsers} to={to} columns={true} /> {creators && (creators?.length || 0) < (maxItems || 100) && <LoadMore loadMore={() => actions.lists.top.users({})} />} </> ); }; export default Creators;