File size: 3,005 Bytes
65d68f5 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 | "use client";
/**
* useDocDoeMode Hook
* React hook for managing DocDoe mode state
* Persists mode in localStorage
* Allows mode switching anytime
*/
import { useState, useEffect } from "react";
import { useRouter } from "next/navigation";
import {
type DocDoeMode,
getMode,
setMode,
getLastQuery,
setLastQuery,
getLastExamDate,
setLastExamDate,
getLastDuration,
setLastDuration,
} from "./modeStorage";
export interface UseDocDoeModeReturn {
mode: DocDoeMode | null;
setMode: (mode: DocDoeMode) => void;
switchMode: (mode: DocDoeMode) => void;
lastQuery: string | null;
setLastQuery: (query: string) => void;
lastExamDate: string | null;
setLastExamDate: (date: string) => void;
lastDuration: number | null;
setLastDuration: (duration: number) => void;
isLoaded: boolean;
}
export function useDocDoeMode(): UseDocDoeModeReturn {
const router = useRouter();
const [mode, setModeState] = useState<DocDoeMode | null>(null);
const [lastQuery, setLastQueryState] = useState<string | null>(null);
const [lastExamDate, setLastExamDateState] = useState<string | null>(null);
const [lastDuration, setLastDurationState] = useState<number | null>(null);
const [isLoaded, setIsLoaded] = useState(false);
// Load mode from localStorage on mount
useEffect(() => {
const timeoutId = window.setTimeout(() => {
setModeState(getMode());
setLastQueryState(getLastQuery());
setLastExamDateState(getLastExamDate());
setLastDurationState(getLastDuration());
setIsLoaded(true);
}, 0);
return () => window.clearTimeout(timeoutId);
}, []);
// Switch mode and navigate to appropriate route
const switchMode = (newMode: DocDoeMode) => {
setMode(newMode);
setModeState(newMode);
// Navigate to the appropriate route
switch (newMode) {
case "tuition":
router.push("/tuition");
break;
case "first-hour":
router.push("/first-hour");
break;
case "study-chat":
router.push("/study-chat");
break;
case "learn-anything":
router.push("/learn-anything");
break;
case "exam-coach":
router.push("/exam-coach");
break;
case "home":
router.push("/study-chat");
break;
}
};
const updateMode = (newMode: DocDoeMode) => {
setMode(newMode);
setModeState(newMode);
};
const updateLastQuery = (query: string) => {
setLastQuery(query);
setLastQueryState(query);
};
const updateLastExamDate = (date: string) => {
setLastExamDate(date);
setLastExamDateState(date);
};
const updateLastDuration = (duration: number) => {
setLastDuration(duration);
setLastDurationState(duration);
};
return {
mode,
setMode: updateMode,
switchMode,
lastQuery,
setLastQuery: updateLastQuery,
lastExamDate,
setLastExamDate: updateLastExamDate,
lastDuration,
setLastDuration: updateLastDuration,
isLoaded,
};
}
|