mirror of
https://github.com/yusufipk/YTChatHub.git
synced 2026-09-11 10:56:17 +00:00
refactor: improve superchat UI and gift membership handling
This commit is contained in:
@@ -435,15 +435,15 @@ function ChatItem({ message, isSelected, onSelect }: ChatItemProps) {
|
||||
{badge.type === 'verified' && '✓'}
|
||||
</span>
|
||||
))}
|
||||
{message.superChat && (
|
||||
<span className="chatItem__superchat-inline" style={{ backgroundColor: message.superChat.color }}>
|
||||
{message.superChat.currency}{message.superChat.currency ? ' ' : ''}{message.superChat.amount}
|
||||
</span>
|
||||
)}
|
||||
</div>
|
||||
<time className="chatItem__time">{new Date(message.publishedAt).toLocaleTimeString()}</time>
|
||||
</div>
|
||||
</div>
|
||||
{message.superChat && (
|
||||
<div className="chatItem__superchat" style={{ backgroundColor: message.superChat.color }}>
|
||||
💰 {message.superChat.currency}{message.superChat.amount}
|
||||
</div>
|
||||
)}
|
||||
<p className="chatItem__text">{message.text}</p>
|
||||
</button>
|
||||
);
|
||||
@@ -463,7 +463,7 @@ function MemberItem({ message, isSelected, onSelect }: ChatItemProps) {
|
||||
<span className="memberItem__author">{message.author}</span>
|
||||
<span className="memberItem__level">
|
||||
{message.membershipGiftPurchase && message.giftCount
|
||||
? `Gifted ${message.giftCount} membership${message.giftCount > 1 ? 's' : ''}`
|
||||
? `Sent ${message.giftCount} gift membership${message.giftCount > 1 ? 's' : ''}`
|
||||
: message.membershipLevel || 'New member'}
|
||||
</span>
|
||||
<time className="memberItem__time">{new Date(message.publishedAt).toLocaleTimeString()}</time>
|
||||
|
||||
@@ -686,6 +686,17 @@ main {
|
||||
align-self: flex-start; /* Align to the left */
|
||||
}
|
||||
|
||||
.chatItem__superchat-inline {
|
||||
padding: 0.3rem 0.6rem;
|
||||
border-radius: 6px;
|
||||
font-weight: 700;
|
||||
font-size: 0.85rem;
|
||||
color: #fff;
|
||||
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);
|
||||
margin-left: 0.5rem;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.chatItem__membership {
|
||||
padding: 0.6rem 1rem;
|
||||
background: linear-gradient(135deg, #10b981, #059669);
|
||||
@@ -944,6 +955,53 @@ main {
|
||||
align-self: flex-start;
|
||||
}
|
||||
|
||||
.overlay__superchat-header {
|
||||
padding: 1rem 1.5rem;
|
||||
border-radius: 12px 12px 0 0;
|
||||
color: #fff;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.4);
|
||||
}
|
||||
|
||||
.overlay__superchat-avatar {
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
border-radius: 50%;
|
||||
object-fit: cover;
|
||||
border: 2px solid rgba(255, 255, 255, 0.3);
|
||||
}
|
||||
|
||||
.overlay__superchat-name {
|
||||
font-size: 1.6rem;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.overlay__superchat-separator {
|
||||
font-size: 1.4rem;
|
||||
font-weight: 600;
|
||||
opacity: 0.9;
|
||||
}
|
||||
|
||||
.overlay__superchat-amount {
|
||||
font-size: 1.6rem;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.overlay__superchat-text {
|
||||
padding: 1rem 1.5rem;
|
||||
font-size: 1.1rem;
|
||||
line-height: 1.6;
|
||||
color: #e5e7eb;
|
||||
font-weight: 400;
|
||||
text-align: left;
|
||||
word-break: break-word;
|
||||
background: rgba(0, 0, 0, 0.3);
|
||||
border-radius: 0 0 12px 12px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.overlay__membership {
|
||||
background: linear-gradient(135deg, #10b981, #059669);
|
||||
}
|
||||
|
||||
+47
-32
@@ -67,39 +67,54 @@ export default function OverlayPage() {
|
||||
<main className="overlay">
|
||||
{message ? (
|
||||
<div className={`overlay__card ${fadingOut ? 'overlay__card--fadeOut' : ''}`}>
|
||||
<div className="overlay__header">
|
||||
{message.authorPhoto && (
|
||||
<img src={message.authorPhoto} alt={message.author} className="overlay__avatar" />
|
||||
)}
|
||||
<div>
|
||||
<div className="overlay__authorLine">
|
||||
<span className="overlay__author">{message.author}</span>
|
||||
{message.badges && message.badges.map((badge, i) => (
|
||||
<span key={i} className={`overlay__badge overlay__badge--${badge.type}`} title={badge.label}>
|
||||
{badge.type === 'moderator' && '🛡️'}
|
||||
{badge.type === 'member' && '⭐'}
|
||||
{badge.type === 'verified' && '✓'}
|
||||
</span>
|
||||
))}
|
||||
{message.superChat ? (
|
||||
<>
|
||||
<div className="overlay__superchat-header" style={{ backgroundColor: message.superChat.color }}>
|
||||
{message.authorPhoto && (
|
||||
<img src={message.authorPhoto} alt={message.author} className="overlay__superchat-avatar" />
|
||||
)}
|
||||
<span className="overlay__superchat-name">{message.author}</span>
|
||||
<span className="overlay__superchat-separator"> - </span>
|
||||
<span className="overlay__superchat-amount">
|
||||
{message.superChat.currency}{message.superChat.currency ? ' ' : ''}{message.superChat.amount}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{message.superChat && (
|
||||
<div className="overlay__superchat" style={{ backgroundColor: message.superChat.color }}>
|
||||
💰 {message.superChat.currency}{message.superChat.amount}
|
||||
</div>
|
||||
)}
|
||||
{(message.membershipGift || message.membershipGiftPurchase) && (
|
||||
<div className="overlay__membership">
|
||||
{message.membershipGiftPurchase && message.giftCount
|
||||
? `🎁 Gifted ${message.giftCount} Membership${message.giftCount > 1 ? 's' : ''}!`
|
||||
: message.membershipGiftPurchase
|
||||
? '🎁 Gift Purchase'
|
||||
: '🎁 New Member!'}
|
||||
</div>
|
||||
)}
|
||||
{(!message.superChat && !message.membershipGift && !message.membershipGiftPurchase) && message.text && (
|
||||
<p className="overlay__text">{message.text}</p>
|
||||
{message.text && (
|
||||
<p className="overlay__superchat-text">{message.text}</p>
|
||||
)}
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
<div className="overlay__header">
|
||||
{message.authorPhoto && (
|
||||
<img src={message.authorPhoto} alt={message.author} className="overlay__avatar" />
|
||||
)}
|
||||
<div>
|
||||
<div className="overlay__authorLine">
|
||||
<span className="overlay__author">{message.author}</span>
|
||||
{message.badges && message.badges.map((badge, i) => (
|
||||
<span key={i} className={`overlay__badge overlay__badge--${badge.type}`} title={badge.label}>
|
||||
{badge.type === 'moderator' && '🛡️'}
|
||||
{badge.type === 'member' && '⭐'}
|
||||
{badge.type === 'verified' && '✓'}
|
||||
</span>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{(message.membershipGift || message.membershipGiftPurchase) && (
|
||||
<div className="overlay__membership">
|
||||
{message.membershipGiftPurchase && message.giftCount
|
||||
? `🎁 Sent ${message.giftCount} Gift Membership${message.giftCount > 1 ? 's' : ''}!`
|
||||
: message.membershipGiftPurchase
|
||||
? '🎁 Gift Purchase'
|
||||
: '🎁 New Member!'}
|
||||
</div>
|
||||
)}
|
||||
{message.text && (
|
||||
<p className="overlay__text">{message.text}</p>
|
||||
)}
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
) : (
|
||||
|
||||
Reference in New Issue
Block a user