snakes v1
This commit is contained in:
parent
72c9d3a173
commit
6dc107babf
|
|
@ -4,6 +4,7 @@ import { Game } from "@/types/Game";
|
||||||
import { games } from "@/data/games";
|
import { games } from "@/data/games";
|
||||||
import { WAGER_PRIZE_MULT } from "@/shared/constants";
|
import { WAGER_PRIZE_MULT } from "@/shared/constants";
|
||||||
import { EXPLORER_ADDRESS_TEMPLATE, API_URL } from "@/data/shared";
|
import { EXPLORER_ADDRESS_TEMPLATE, API_URL } from "@/data/shared";
|
||||||
|
import Image from 'next/image';
|
||||||
|
|
||||||
interface GameHistory {
|
interface GameHistory {
|
||||||
address: string;
|
address: string;
|
||||||
|
|
@ -175,15 +176,19 @@ export default function GameHistoryModal({
|
||||||
{outcomeText}
|
{outcomeText}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<img
|
<Image
|
||||||
src={profileUrl}
|
src={profileUrl}
|
||||||
alt="Profile"
|
alt="Profile"
|
||||||
className="w-10 h-10 rounded-full border border-gray-700 object-cover"
|
width={40}
|
||||||
|
height={40}
|
||||||
|
className="rounded-full border border-gray-700 object-cover"
|
||||||
/>
|
/>
|
||||||
<img
|
<Image
|
||||||
src={gameImageUrl}
|
src={gameImageUrl}
|
||||||
alt="Game Thumbnail"
|
alt="Game Thumbnail"
|
||||||
className="w-16 h-16 rounded-md object-cover ml-4"
|
width={64}
|
||||||
|
height={64}
|
||||||
|
className="rounded-md object-cover ml-4"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
{/* View TX Action */}
|
{/* View TX Action */}
|
||||||
|
|
|
||||||
|
|
@ -28,32 +28,11 @@ export default function HeroSection() {
|
||||||
const { user } = usePrivy();
|
const { user } = usePrivy();
|
||||||
const iframeRef = useRef<HTMLIFrameElement>(null);
|
const iframeRef = useRef<HTMLIFrameElement>(null);
|
||||||
|
|
||||||
|
|
||||||
useEffect(()=>{
|
|
||||||
if(rematch){
|
|
||||||
if(!lastActiveBet){
|
|
||||||
console.log(`last active bet was null, heres active bet ${myActiveBet}`);
|
|
||||||
}
|
|
||||||
const isOwner = lastActiveBet?.owner_id == user?.id;
|
|
||||||
console.log(`rematch function ${isOwner ? "owner" : "joiner"} owner_id:${lastActiveBet?.owner_id}`);
|
|
||||||
|
|
||||||
if(isOwner){
|
|
||||||
handleCreateRematch();
|
|
||||||
}else{
|
|
||||||
handleJoinRematch();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
},[rematch])
|
|
||||||
|
|
||||||
|
|
||||||
const game_close_signal = (status: number) => {
|
const game_close_signal = (status: number) => {
|
||||||
setRematch(status == 1);
|
setRematch(status == 1);
|
||||||
setMyActiveBet(undefined);
|
setMyActiveBet(undefined);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const updateBets = async () => {
|
const updateBets = async () => {
|
||||||
if(ready){
|
if(ready){
|
||||||
const wallet = wallets.find((_wallet) => _wallet.type === "solana") || wallets[0];
|
const wallet = wallets.find((_wallet) => _wallet.type === "solana") || wallets[0];
|
||||||
|
|
@ -218,16 +197,28 @@ export default function HeroSection() {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if(rematch){
|
||||||
|
if(true){
|
||||||
|
handleCreateRematch();
|
||||||
|
}else{
|
||||||
|
handleJoinRematch();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},[rematch, handleCreateRematch, handleJoinRematch]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (ready) {
|
||||||
|
updateBets();
|
||||||
|
}
|
||||||
|
}, [ready, updateBets]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!ready) return;
|
if (!ready) return;
|
||||||
|
|
||||||
updateBets();
|
updateBets();
|
||||||
const interval = setInterval(updateBets, 3000);
|
const interval = setInterval(updateBets, 3000);
|
||||||
|
|
||||||
return () => clearInterval(interval);
|
return () => clearInterval(interval);
|
||||||
}, [ready]);
|
}, [ready, updateBets]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const handleMessage = (event: MessageEvent) => {
|
const handleMessage = (event: MessageEvent) => {
|
||||||
|
|
|
||||||
|
|
@ -97,7 +97,7 @@ export default function YourGames({ bets }: GameModalProps) {
|
||||||
updateBets();
|
updateBets();
|
||||||
const interval = setInterval(updateBets, 10000);
|
const interval = setInterval(updateBets, 10000);
|
||||||
return () => clearInterval(interval);
|
return () => clearInterval(interval);
|
||||||
}, [bets]);
|
}, [bets, updateBets]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<section className="py-16 px-6">
|
<section className="py-16 px-6">
|
||||||
|
|
@ -162,7 +162,7 @@ export default function YourGames({ bets }: GameModalProps) {
|
||||||
height={24}
|
height={24}
|
||||||
className="rounded-full"
|
className="rounded-full"
|
||||||
onError={(e) => {
|
onError={(e) => {
|
||||||
// @ts-ignore
|
//@ts-expect-error e.target has no src, but it needs to be changed
|
||||||
e.target.src = defaultPFP;
|
e.target.src = defaultPFP;
|
||||||
setFailedImages(prev => new Set(prev).add(ownerPFP));
|
setFailedImages(prev => new Set(prev).add(ownerPFP));
|
||||||
}}
|
}}
|
||||||
|
|
@ -235,7 +235,7 @@ export default function YourGames({ bets }: GameModalProps) {
|
||||||
height={32}
|
height={32}
|
||||||
className="w-8 h-8 rounded-full mr-2"
|
className="w-8 h-8 rounded-full mr-2"
|
||||||
onError={(e) => {
|
onError={(e) => {
|
||||||
// @ts-ignore
|
//@ts-expect-error e.target has no src, but it needs to be changed
|
||||||
e.target.src = defaultPFP;
|
e.target.src = defaultPFP;
|
||||||
setFailedImages(prev => new Set(prev).add(modalOwnerPFP));
|
setFailedImages(prev => new Set(prev).add(modalOwnerPFP));
|
||||||
}}
|
}}
|
||||||
|
|
|
||||||
|
|
@ -370,10 +370,12 @@ export default function PrivyButton() {
|
||||||
{/* Avatar + Link Twitter Row */}
|
{/* Avatar + Link Twitter Row */}
|
||||||
<div className="flex items-center justify-between gap-4 flex-wrap">
|
<div className="flex items-center justify-between gap-4 flex-wrap">
|
||||||
<div className="flex items-center gap-4">
|
<div className="flex items-center gap-4">
|
||||||
<img
|
<Image
|
||||||
src={user?.twitter ? (twitterProfilePic) : (avatar ?? customProfileUrl)}
|
src={user?.twitter ? (twitterProfilePic) : (avatar ?? customProfileUrl)}
|
||||||
alt=""
|
alt="Profile"
|
||||||
className="w-16 h-16 rounded-full border border-gray-500 object-cover"
|
width={64}
|
||||||
|
height={64}
|
||||||
|
className="rounded-full border border-gray-500 object-cover"
|
||||||
/>
|
/>
|
||||||
{(!user.twitter) ? (<label className="bg-gray-800 hover:bg-gray-700 text-white text-sm px-4 py-2 rounded-md cursor-pointer flex items-center gap-2">
|
{(!user.twitter) ? (<label className="bg-gray-800 hover:bg-gray-700 text-white text-sm px-4 py-2 rounded-md cursor-pointer flex items-center gap-2">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" className="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
<svg xmlns="http://www.w3.org/2000/svg" className="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||||
|
|
@ -578,7 +580,7 @@ export default function PrivyButton() {
|
||||||
height={40}
|
height={40}
|
||||||
className="w-10 h-10 rounded-full border border-gray-700 object-cover"
|
className="w-10 h-10 rounded-full border border-gray-700 object-cover"
|
||||||
onError={(e) => {
|
onError={(e) => {
|
||||||
// @ts-ignore
|
// @ts-expect-error - Type mismatch expected
|
||||||
e.target.src = defaultPFP;
|
e.target.src = defaultPFP;
|
||||||
setFailedImages(prev => new Set(prev).add(profileUrl));
|
setFailedImages(prev => new Set(prev).add(profileUrl));
|
||||||
}}
|
}}
|
||||||
|
|
@ -590,7 +592,7 @@ export default function PrivyButton() {
|
||||||
height={64}
|
height={64}
|
||||||
className="w-16 h-16 rounded-md object-cover ml-4"
|
className="w-16 h-16 rounded-md object-cover ml-4"
|
||||||
onError={(e) => {
|
onError={(e) => {
|
||||||
// @ts-ignore
|
// @ts-expect-error - Type mismatch expected
|
||||||
e.target.src = "/duelfiassets/default-game-thumbnail.png";
|
e.target.src = "/duelfiassets/default-game-thumbnail.png";
|
||||||
setFailedImages(prev => new Set(prev).add(gameImageUrl));
|
setFailedImages(prev => new Set(prev).add(gameImageUrl));
|
||||||
}}
|
}}
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ export default function YourGames({bets}:GameModalProps) {
|
||||||
updateBets();
|
updateBets();
|
||||||
const interval = setInterval(updateBets, 10000);
|
const interval = setInterval(updateBets, 10000);
|
||||||
return () => clearInterval(interval);
|
return () => clearInterval(interval);
|
||||||
}, [bets]);
|
}, [bets, ready, updateBets]);
|
||||||
|
|
||||||
// Handle bet closing
|
// Handle bet closing
|
||||||
const handleCloseBet = async () => {
|
const handleCloseBet = async () => {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { Connection, clusterApiUrl } from "@solana/web3.js";
|
import { Connection } from "@solana/web3.js";
|
||||||
|
|
||||||
// Replace this URL with your dedicated RPC endpoint
|
// Replace this URL with your dedicated RPC endpoint
|
||||||
// You can get one from providers like QuickNode, Alchemy, Helius, or GenesysGo
|
// You can get one from providers like QuickNode, Alchemy, Helius, or GenesysGo
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user