diff --git a/next.config.js b/next.config.js index 05b54d3..d6d2cc4 100644 --- a/next.config.js +++ b/next.config.js @@ -3,7 +3,24 @@ const nextConfig = { reactStrictMode: true, images: { dangerouslyAllowSVG: true, - domains: ['ipfs.near.social', 'another-domain.com', 'i.near.social', 'robohash.org'], + remotePatterns: [ + { + protocol: 'https', + hostname: 'ipfs.near.social', + }, + { + protocol: 'https', + hostname: 'another-domain.com', + }, + { + protocol: 'https', + hostname: 'i.near.social', + }, + { + protocol: 'https', + hostname: 'robohash.org', + }, + ], }, }; diff --git a/src/components/CompetitionCard.js b/src/components/CompetitionCard.js index 27d3c39..dfa493d 100644 --- a/src/components/CompetitionCard.js +++ b/src/components/CompetitionCard.js @@ -3,7 +3,7 @@ import Image from 'next/image'; import { ListContract } from '../config'; import { FaTwitter } from 'react-icons/fa'; -const CompetitionCard = ({ competition, listLink, profiles, wallet }) => { +const CompetitionCard = ({ competition, listLink, profiles, wallet, isAllCommentsVisible }) => { const [listDetails, setListDetails] = useState(null); const [approvedRegistrations, setApprovedRegistrations] = useState([]); const [isContentVisible, setIsContentVisible] = useState(false); @@ -40,6 +40,11 @@ const CompetitionCard = ({ competition, listLink, profiles, wallet }) => { fetchListDetails(); }, [listLink, wallet]); + useEffect(() => { + setCommentVisibility(Array(competition.content.length).fill(isAllCommentsVisible)); + setIsContentVisible(isAllCommentsVisible); + }, [isAllCommentsVisible, competition.content.length]); + const displayName = listDetails?.name || competition.name; const backdrop = listDetails?.cover_image_url || ''; @@ -60,6 +65,11 @@ const CompetitionCard = ({ competition, listLink, profiles, wallet }) => { ); }; + const toggleAllComments = () => { + const allVisible = commentVisibility.every(visible => visible); + setCommentVisibility(Array(competition.content.length).fill(!allVisible)); + }; + return (
@@ -95,32 +105,31 @@ const CompetitionCard = ({ competition, listLink, profiles, wallet }) => {
{isContentVisible && (
+
- {competition.content.map((item, index) => { - console.log('Item Comment:', item.comment); - - return ( -
- toggleCommentVisibility(index)} - className="cursor-pointer" - > - {item.name} - - {commentVisibility[index] && ( -
- {item.comment} -
- )} - {item.twitterLink && ( - - - - )} -
- ); - })} + {competition.content.map((item, index) => ( +
+ item.comment && toggleCommentVisibility(index)} + className={`cursor-pointer ${!item.comment && 'cursor-default'}`} + > + {item.name} + + {commentVisibility[index] && item.comment && ( +
+ {item.comment} +
+ )} + {item.twitterLink && ( + + + + )} +
+ ))}
{listLink && (
diff --git a/src/pages/index.js b/src/pages/index.js index 91680b5..43c1e3a 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -23,6 +23,12 @@ const categoryColors = { const LandingPage = () => { const { wallet } = useContext(NearContext); const [profiles, setProfiles] = useState({}); + const [expandedCompetition, setExpandedCompetition] = useState(null); + const [selectedCategory, setSelectedCategory] = useState('All'); + const [searchTerm, setSearchTerm] = useState(''); + const [selectedCompetitors, setSelectedCompetitors] = useState([]); + const [loading, setLoading] = useState(true); + const [isAllCommentsVisible, setIsAllCommentsVisible] = useState(false); useEffect(() => { const fetchProfiles = async () => { @@ -46,27 +52,20 @@ const LandingPage = () => { }, {}); setProfiles(profilesMap); + setLoading(false); }; fetchProfiles(); }, [wallet]); - const [expandedCompetition, setExpandedCompetition] = useState(null); - const [selectedCategory, setSelectedCategory] = useState('All'); - const [searchTerm, setSearchTerm] = useState(''); - const [selectedCompetitors, setSelectedCompetitors] = useState([]); - const [loading, setLoading] = useState(true); - - useEffect(() => { - // Simulate data loading - const timer = setTimeout(() => setLoading(false), 1000); - return () => clearTimeout(timer); - }, []); - const toggleCompetition = (id) => { setExpandedCompetition(expandedCompetition === id ? null : id); }; + const toggleAllComments = () => { + setIsAllCommentsVisible(!isAllCommentsVisible); + }; + const categories = ['All', ...new Set(importedCompetitionsData.flatMap(group => group.competitions.map(comp => comp.category)))]; const competitors = ['All', ...new Set(importedCompetitionsData.flatMap(group => group.competitions.flatMap(comp => comp.content.map(item => item.name))))]; @@ -280,6 +279,9 @@ const LandingPage = () => { /> + {loading ? (

Loading...

@@ -294,6 +296,7 @@ const LandingPage = () => { listLink={competition.listLink} profiles={profiles} wallet={wallet} + isAllCommentsVisible={isAllCommentsVisible} /> ))}