TypeScript · 1748 bytes Raw Blame History
1 import { useState, useCallback } from 'react';
2 import { gameApi, FHSDirectory, CommandReferenceResponse } from '@/lib/api';
3
4 export const useHelpModals = (gameTreeId: number | null) => {
5 const [showHints, setShowHints] = useState(false);
6 const [hints, setHints] = useState<string[]>([]);
7
8 const [showFHS, setShowFHS] = useState(false);
9 const [fhsDirs, setFhsDirs] = useState<FHSDirectory[]>([]);
10
11 const [showCommands, setShowCommands] = useState(false);
12 const [commandRef, setCommandRef] = useState<CommandReferenceResponse | null>(null);
13
14 const getHints = useCallback(async () => {
15 if (!gameTreeId) return;
16
17 try {
18 const response = await gameApi.getHint(gameTreeId);
19 setHints(response.hints);
20 setShowHints(true);
21 } catch (error) {
22 console.error('Failed to get hints:', error);
23 }
24 }, [gameTreeId]);
25
26 const getFHSReference = useCallback(async () => {
27 try {
28 const response = await gameApi.getFHSReference();
29 setFhsDirs(response.directories);
30 setShowFHS(true);
31 } catch (error) {
32 console.error('Failed to get FHS reference:', error);
33 }
34 }, []);
35
36 const getCommandReference = useCallback(async () => {
37 try {
38 if (!commandRef) {
39 const response = await gameApi.getCommandReference();
40 setCommandRef(response);
41 }
42 setShowCommands(true);
43 } catch (error) {
44 console.error('Failed to get command reference:', error);
45 }
46 }, [commandRef]);
47
48 return {
49 // Hints
50 showHints,
51 setShowHints,
52 hints,
53 getHints,
54
55 // FHS
56 showFHS,
57 setShowFHS,
58 fhsDirs,
59 getFHSReference,
60
61 // Commands
62 showCommands,
63 setShowCommands,
64 commandRef,
65 getCommandReference,
66 };
67 };