diff --git a/assets/js/mine-seeker/components/index.js b/assets/js/mine-seeker/components/index.js
index 06c59b5..6e8c095 100644
--- a/assets/js/mine-seeker/components/index.js
+++ b/assets/js/mine-seeker/components/index.js
@@ -10,6 +10,7 @@
export { GameBoard } from './GameBoard';
export { default as OnlinePlayersDialog } from './OnlinePlayersDialog';
export { default as WaitingOverlayContent } from './WaitingOverlayContent';
+export { default as ChallengeCountdown } from './ChallengeCountdown';
export { default as GameTimer } from './GameTimer';
export { default as GridControl } from './grid/GridControl';
export { default as GridField } from './grid/GridField';
diff --git a/assets/js/mine-seeker/hooks/useServerCommunication.jsx b/assets/js/mine-seeker/hooks/useServerCommunication.jsx
index cd35913..f94d9f7 100644
--- a/assets/js/mine-seeker/hooks/useServerCommunication.jsx
+++ b/assets/js/mine-seeker/hooks/useServerCommunication.jsx
@@ -14,7 +14,8 @@ import { DESC } from '@mine-utils';
import useStepTimer from './useStepTimer';
import { WaitingOverlayContent } from '@mine-components';
-/** Handles all server communication: SSE (Mercure), REST calls, and the initialization lifecycle. */
+import { ChallengeCountdown } from '@mine-components';
+
const useServerCommunication = (gameAssoc, gameInherited, isEnvDev) => {
const {
/** Async-safe refs */
@@ -136,8 +137,10 @@ const useServerCommunication = (gameAssoc, gameInherited, isEnvDev) => {
const wChallenge = payload => {
const { challengerName, challengerGameAssoc } = payload;
+ let declineTimeout = null;
const handleAccept = () => {
+ clearTimeout(declineTimeout);
fetch('/api/game/challenge/respond/' + challengerGameAssoc, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
@@ -148,6 +151,7 @@ const useServerCommunication = (gameAssoc, gameInherited, isEnvDev) => {
};
const handleDecline = () => {
+ clearTimeout(declineTimeout);
fetch('/api/game/challenge/respond/' + challengerGameAssoc, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
@@ -162,12 +166,11 @@ const useServerCommunication = (gameAssoc, gameInherited, isEnvDev) => {
}).catch(() => {});
};
+ declineTimeout = setTimeout(handleDecline, 30000);
+
showOverlay(
challengerName + ' wants to challenge you!',
-
,
+
,
);
};