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}
/>
))}