import { Link } from 'react-router-dom'; import { useEffect, useState } from 'react'; import PropTypes from 'prop-types'; import { clsm, isTextColorInverted } from '../utils'; import { PROFILE_COLORS } from '../constants'; import { useCallback } from 'react'; import { useResponsiveDevice } from '../contexts/ResponsiveDevice'; import LivePill from './LivePill'; import UserAvatar from './UserAvatar'; const commonChannelCardClasses = [ '-mb-[1px]', 'aspect-video', 'bg-center', 'bg-cover', 'rounded-t-xl', 'transition-colors' ]; const ChannelCard = ({ avatarSrc, bannerSrc, color, username, variant }) => { const [hasBannerError, setHasBannerError] = useState(false); const [shouldHavePointerEvents, setShouldHavePointerEvents] = useState(false); const { isTouchscreenDevice } = useResponsiveDevice(); const shouldShowBanner = !!(!hasBannerError && bannerSrc); const onError = useCallback(() => { setHasBannerError(true); }, []); useEffect(() => { // Addresses a potential issue on iOS where, after signin, the first card would get the hover state. setShouldHavePointerEvents(true); }, []); return (
{shouldShowBanner && ( )}

{username}

{variant === 'live' && (
)} ); }; ChannelCard.propTypes = { avatarSrc: PropTypes.string, bannerSrc: PropTypes.string, color: PropTypes.oneOf([...PROFILE_COLORS, 'default']), username: PropTypes.string, variant: PropTypes.oneOf(['default', 'offline', 'live']) }; ChannelCard.defaultProps = { avatarSrc: '', bannerSrc: '', color: 'default', username: '', variant: 'default' }; export default ChannelCard;