diff --git a/src/components/Support.tsx b/src/components/Support.tsx index 9449895e..228d05cd 100644 --- a/src/components/Support.tsx +++ b/src/components/Support.tsx @@ -2,7 +2,7 @@ import React, { useEffect, useState } from 'react' import { RelayPool } from 'applesauce-relay' import { IEventStore } from 'applesauce-core' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' -import { faHeart, faSpinner, faUserCircle } from '@fortawesome/free-solid-svg-icons' +import { faHeart, faUserCircle } from '@fortawesome/free-solid-svg-icons' import { fetchBorisZappers, ZapSender } from '../services/zapReceiptService' import { fetchProfiles } from '../services/profileService' import { UserSettings } from '../services/settingsService' @@ -21,7 +21,7 @@ type SupporterProfile = ZapSender const Support: React.FC = ({ relayPool, eventStore, settings }) => { const [supporters, setSupporters] = useState([]) - const [loading, setLoading] = useState(true) + const [loading, setLoading] = useState(false) useEffect(() => { const loadSupporters = async () => { @@ -31,7 +31,8 @@ const Support: React.FC = ({ relayPool, eventStore, settings }) => if (zappers.length > 0) { const pubkeys = zappers.map(z => z.pubkey) - await fetchProfiles(relayPool, eventStore, pubkeys, settings) + // Fetch profiles in background without blocking + fetchProfiles(relayPool, eventStore, pubkeys, settings).catch(() => {}) } setSupporters(zappers) @@ -45,14 +46,6 @@ const Support: React.FC = ({ relayPool, eventStore, settings }) => loadSupporters() }, [relayPool, eventStore, settings]) - if (loading) { - return ( -
- -
- ) - } - return (
@@ -82,7 +75,32 @@ const Support: React.FC = ({ relayPool, eventStore, settings }) =>

- {supporters.length === 0 ? ( + {loading ? ( + <> + {/* Loading Skeletons */} +
+

+ Legends +

+
+ {Array.from({ length: 3 }).map((_, i) => ( + + ))} +
+
+ +
+

+ Supporters +

+
+ {Array.from({ length: 12 }).map((_, i) => ( + + ))} +
+
+ + ) : supporters.length === 0 ? (

No supporters yet. Be the first to zap Boris!

@@ -231,5 +249,55 @@ const SupporterCard: React.FC = ({ supporter, isWhale }) => ) } +interface SupporterSkeletonProps { + isWhale: boolean +} + +const SupporterSkeleton: React.FC = ({ isWhale }) => { + return ( +
+
+ {/* Avatar Skeleton */} +
+
+
+ + {/* Whale Badge Skeleton */} + {isWhale && ( +
+ )} +
+ + {/* Name and Total Skeleton */} +
+
+
+
+
+ ) +} + export default Support