diff --git a/app/globals.css b/app/globals.css
index 9a63cbb..ef506a2 100644
--- a/app/globals.css
+++ b/app/globals.css
@@ -15,6 +15,7 @@ body {
:root {
--glassmorphism-gradient: linear-gradient(135deg, rgba(255, 255, 255, 0.15) 0%, rgba(0, 0, 0, 0.1) 100%);
+ --glassmorphism-gradient-hover: linear-gradient(135deg, rgba(255, 255, 255, 0.3) 0%, rgba(0, 0, 0, 0.3) 100%);
--glassmorphism-bg: rgba(255, 255, 255, 0.03);
--glassmorphism-blur: 10px;
--glassmorphism-border: rgba(255, 255, 255, 0.15);
@@ -26,7 +27,8 @@ body {
border: 1px solid var(--glassmorphism-border);
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
position: relative;
- overflow: hidden; /* Ensure noise texture covers the entire element */
+ overflow: hidden;
+ transition: background 0.3s ease, box-shadow 0.3s ease, border 0.3s ease;
}
.glassmorphism::before {
content: "";
@@ -58,6 +60,12 @@ body {
justify-content: center; /* Center vertically */
align-items: center; /* Center horizontally */
position: relative;
+ transition: background-image 0.3s ease, box-shadow 0.3s ease, border 0.3s ease, backdrop-filter 0.3s ease;
+
+}
+
+.leaderboard-card:hover{
+ background: var(--glassmorphism-gradient-hover), var(--glassmorphism-bg);
}
diff --git a/app/modal.tsx b/app/modal.tsx
new file mode 100644
index 0000000..e8ce596
--- /dev/null
+++ b/app/modal.tsx
@@ -0,0 +1,33 @@
+// Modal.js
+
+import React from 'react';
+
+const Modal = ({ isOpen, onClose, item }) => {
+ if (!isOpen) return null;
+
+ return (
+
+
+ {/* Modal content */}
+
+ {/* Header */}
+
+
{item.username}s Details
+
+
+ {/* Body */}
+
+
{item.username} has {item.points} points.
+
+
+
+
+ );
+};
+
+export default Modal;
diff --git a/app/page.tsx b/app/page.tsx
index 1e8de4c..46b662d 100644
--- a/app/page.tsx
+++ b/app/page.tsx
@@ -5,6 +5,7 @@ import { SunIcon, MoonIcon } from "@heroicons/react/solid";
import { PrivyProvider, usePrivy } from "@privy-io/react-auth";
import { FaTwitter, FaWallet } from "react-icons/fa";
import { CheckIcon } from "@heroicons/react/outline";
+import Modal from './modal';
// Helper functions to generate pseudo data
const generateRandomName = () => {
@@ -22,6 +23,7 @@ const generateRandomPoint = () => {
};
function Home() {
+ const [modalOpen, setModalOpen] = useState(false);
const { login, user, ready, logout, linkTwitter, unlinkTwitter, linkWallet, unlinkWallet } = usePrivy();
const [darkMode, setDarkMode] = useState(true);
const [twitterConnected, setTwitterConnected] = useState(false); // State to track Twitter connection
@@ -29,6 +31,19 @@ function Home() {
const [incrementNumber, setIncrementNumber] = useState(1);
const [leaderboardData, setLeaderboardData] = useState([]);
const [isJoined, setIsJoined] = useState(false);
+ const [selectedItem, setSelectedItem] = useState(null); // State to store selected leaderboard item
+
+ // Function to handle opening modal and setting selected item
+ const openModal = (item) => {
+ setSelectedItem(item);
+ setModalOpen(true);
+ };
+
+ // Function to handle closing modal
+ const closeModal = () => {
+ setSelectedItem(null);
+ setModalOpen(false);
+ };
useEffect(() => {
if (darkMode) {
@@ -39,17 +54,31 @@ function Home() {
}, [darkMode]);
useEffect(() => {
- const intervalId = setInterval(async () => {
- setIncrementNumber((prevNumber) => prevNumber + 1);
- const response = await fetch('https://api.callfi.io/get_leaderboard.php');
- if (!response.ok) {
- throw new Error('Network response was not ok');
+ const fetchData = async () => {
+ try {
+ const response = await fetch('https://api.callfi.io/get_leaderboard.php');
+ if (!response.ok) {
+ throw new Error('Network response was not ok');
+ }
+ const data = await response.json();
+ console.log('Leaderboard data:', data);
+ setLeaderboardData(data);
+ } catch (error) {
+ console.error('Failed to fetch leaderboard data:', error);
}
- const data = await response.json();
- console.log('Leaderboard data:', data);
- setLeaderboardData(data);
+ };
+
+ // Fetch data immediately on mount
+ fetchData();
+
+ // Set up the interval to fetch data every 5 seconds
+ const intervalId = setInterval(() => {
+ setIncrementNumber((prevNumber) => prevNumber + 1);
+ fetchData();
}, 5000);
- return () => clearInterval(intervalId); // Clean up the interval on component unmount
+
+ // Clean up the interval on component unmount
+ return () => clearInterval(intervalId);
}, []);
const toggleDarkMode = () => {
@@ -71,6 +100,17 @@ function Home() {
} catch (error) {
console.error('Error during API call:', error);
}
+
+ try{
+ const response = await fetch('https://api.callfi.io/check_user_approved.php?tag=' + usertag);
+ const responseTxt = await response.text();
+ if(responseTxt == "1"){
+ setIsJoined(true);
+ }
+
+ }catch(error){
+
+ }
};
useEffect(() => {
@@ -123,18 +163,33 @@ function Home() {
{/* Note card */}
{
- ready && user?.twitter &&(
+ ready && user?.twitter && !isJoined &&(
)
}
+
+ {
+ ready && user?.twitter && isJoined &&(
+
+
+
Feeling Lucky?
+
Make a callout to a token you believe in!!
+
+
+
+ )
+ }
+
{
ready && !user?.twitter && (
@@ -162,13 +217,17 @@ function Home() {
{leaderboardData.map((item) => (
-
= 0 ? 'positive' : 'negative'} mx-auto mb-4`}>
+
= 0 ? 'positive' : 'negative'} mx-auto mb-4`} onClick={() => openModal(item)}>
{item["username"]}
{parseFloat(item["points"]).toFixed(2)}x
))}
+ {/* Modal */}
+
+
+ {/* Rest of your Home component */}