Skip to content

Commit b8607ba

Browse files
author
Thomas Wang
committed
its own file
1 parent 173c4b6 commit b8607ba

File tree

4 files changed

+48
-30
lines changed

4 files changed

+48
-30
lines changed

packages/classic-webview/src/hooks/useGame.tsx

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,7 @@ import { sendMessageToDevvit } from '../utils';
44
import { useDevvitListener } from './useDevvitListener';
55
import { logger } from '../utils/logger';
66
import { useMocks } from './useMocks';
7-
8-
type WordSubmissionStateContext = {
9-
isSubmitting: boolean;
10-
setIsSubmitting: (isSubmitting: boolean) => void;
11-
};
12-
const WordSubmissionContext = createContext<WordSubmissionStateContext | null>(null);
7+
import { useWordSubmission } from './useWordSubmission';
138

149
const GameContext = createContext<Partial<Game>>({});
1510
const GameUpdaterContext = createContext<React.Dispatch<
@@ -19,7 +14,7 @@ const GameUpdaterContext = createContext<React.Dispatch<
1914
export const GameContextProvider = ({ children }: { children: React.ReactNode }) => {
2015
const mocks = useMocks();
2116
const [game, setGame] = useState<Partial<Game>>(mocks.getMock('mocks')?.game ?? {});
22-
const [isSubmitting, setIsSubmitting] = useState(false);
17+
const { setIsSubmitting } = useWordSubmission();
2318

2419
const initResponse = useDevvitListener('GAME_INIT_RESPONSE');
2520
const submissionResponse = useDevvitListener('WORD_SUBMITTED_RESPONSE');
@@ -47,7 +42,7 @@ export const GameContextProvider = ({ children }: { children: React.ReactNode })
4742
setGame(submissionResponse);
4843
setIsSubmitting(false);
4944
}
50-
}, [submissionResponse]);
45+
}, [submissionResponse, setIsSubmitting]);
5146

5247
useEffect(() => {
5348
logger.log('Hint response: ', hintResponse);
@@ -65,9 +60,7 @@ export const GameContextProvider = ({ children }: { children: React.ReactNode })
6560

6661
return (
6762
<GameUpdaterContext.Provider value={setGame}>
68-
<WordSubmissionContext.Provider value={{ isSubmitting, setIsSubmitting }}>
69-
<GameContext.Provider value={game}>{children}</GameContext.Provider>
70-
</WordSubmissionContext.Provider>
63+
<GameContext.Provider value={game}>{children}</GameContext.Provider>
7164
</GameUpdaterContext.Provider>
7265
);
7366
};
@@ -87,11 +80,3 @@ export const useSetGame = () => {
8780
}
8881
return setGame;
8982
};
90-
91-
export const useWordSubmission = () => {
92-
const context = useContext(WordSubmissionContext);
93-
if (context === null) {
94-
throw new Error('useWordSubmission must be used within a WordSubmissionProvider');
95-
}
96-
return context;
97-
};
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { createContext, useContext, ReactNode, useState } from 'react';
2+
3+
type WordSubmissionStateContext = {
4+
isSubmitting: boolean;
5+
setIsSubmitting: (isSubmitting: boolean) => void;
6+
};
7+
8+
const WordSubmissionContext = createContext<WordSubmissionStateContext | null>(null);
9+
10+
export const WordSubmissionProvider = ({ children }: { children: ReactNode }) => {
11+
const [isSubmitting, setIsSubmitting] = useState(false);
12+
13+
return (
14+
<WordSubmissionContext.Provider value={{ isSubmitting, setIsSubmitting }}>
15+
{children}
16+
</WordSubmissionContext.Provider>
17+
);
18+
};
19+
20+
export const useWordSubmission = () => {
21+
const context = useContext(WordSubmissionContext);
22+
if (context === null) {
23+
throw new Error('useWordSubmission must be used within a WordSubmissionProvider');
24+
}
25+
return context;
26+
};

packages/classic-webview/src/main.tsx

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { ConfirmationDialogProvider } from '@hotandcold/webview-common/hooks/use
1212
import { IS_DETACHED } from './constants';
1313
import { ModalContextProvider } from './hooks/useModal';
1414
import { HardcoreAccessContextProvider } from './hooks/useHardcoreAccess';
15+
import { WordSubmissionProvider } from './hooks/useWordSubmission';
1516

1617
console.log('webview main called');
1718

@@ -25,13 +26,15 @@ createRoot(document.getElementById('root')!).render(
2526
<ConfirmationDialogProvider>
2627
<UserSettingsContextProvider>
2728
<HardcoreAccessContextProvider>
28-
<GameContextProvider>
29-
<ModalContextProvider>
30-
<PageContextProvider>
31-
<App />
32-
</PageContextProvider>
33-
</ModalContextProvider>
34-
</GameContextProvider>
29+
<WordSubmissionProvider>
30+
<GameContextProvider>
31+
<ModalContextProvider>
32+
<PageContextProvider>
33+
<App />
34+
</PageContextProvider>
35+
</ModalContextProvider>
36+
</GameContextProvider>
37+
</WordSubmissionProvider>
3538
</HardcoreAccessContextProvider>
3639
</UserSettingsContextProvider>
3740
</ConfirmationDialogProvider>

packages/classic-webview/src/pages/PlayPage.tsx

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ import { useEffect, useState } from 'react';
22
import { sendMessageToDevvit } from '../utils';
33
import { WordInput } from '@hotandcold/webview-common/components/wordInput';
44
import { Guesses } from '../components/guesses';
5-
import { useGame, useWordSubmission } from '../hooks/useGame';
5+
import { useGame } from '../hooks/useGame';
6+
import { useWordSubmission } from '../hooks/useWordSubmission';
67
import { useDevvitListener } from '../hooks/useDevvitListener';
78
import clsx from 'clsx';
89
import { FeedbackResponse } from '@hotandcold/classic-shared';
@@ -15,14 +16,17 @@ import { UnlockHardcoreCTAContent } from '../components/UnlockHardcoreCTAContent
1516

1617
const useFeedback = (): { feedback: FeedbackResponse | null; dismissFeedback: () => void } => {
1718
const [feedback, setFeedback] = useState<FeedbackResponse | null>(null);
18-
const { setIsSubmitting } = useWordSubmission();
1919
const message = useDevvitListener('FEEDBACK');
20+
const { setIsSubmitting } = useWordSubmission();
2021

2122
useEffect(() => {
2223
if (!message) return;
23-
setFeedback(message);
24+
25+
// Reset the submission state when feedback is received
26+
// This handles the case where the user submits a word they've already guessed
2427
setIsSubmitting(false);
25-
}, [message]);
28+
setFeedback(message);
29+
}, [message, setIsSubmitting]);
2630

2731
const dismissFeedback = () => {
2832
setFeedback(null);

0 commit comments

Comments
 (0)