backsplash-app
Version:
An AI powered wallpaper app.
71 lines (60 loc) • 2.23 kB
text/typescript
import { useState, useEffect } from "react";
const TOUR_SEEN_KEY = "user-has-seen-tour";
export function useHasSeenTour() {
const [hasSeenTour, setHasSeenTour] = useState<boolean | null>(null);
const [loading, setLoading] = useState(true);
// Fetch the initial value
useEffect(() => {
const fetchHasSeenTour = async () => {
try {
setLoading(true);
const result = await window.electron.ipcRenderer.invoke("store:get:userHasSeenTour");
console.log("[useHasSeenTour] Fetched tour status:", result);
// Only consider explicitly true values as seen, otherwise show the tour
setHasSeenTour(result === true);
} catch (error) {
console.error("[useHasSeenTour] Error fetching tour status:", error);
// Default to false (show the tour) if there's an error
setHasSeenTour(false);
} finally {
setLoading(false);
}
};
fetchHasSeenTour();
// Listen for updates from other windows/processes
const handleUpdate = (_event: any, newValue: boolean) => {
console.log("[useHasSeenTour] Received update:", newValue);
setHasSeenTour(newValue === true);
};
window.electron.ipcRenderer.on(`store:updated:${TOUR_SEEN_KEY}`, handleUpdate);
return () => {
window.electron.ipcRenderer.removeListener(`store:updated:${TOUR_SEEN_KEY}`, handleUpdate);
};
}, []);
// Mark the tour as seen
const markTourAsSeen = async () => {
try {
console.log("[useHasSeenTour] Marking tour as seen");
await window.electron.ipcRenderer.invoke("store:set:userHasSeenTour", true);
setHasSeenTour(true);
} catch (error) {
console.error("[useHasSeenTour] Error setting tour status:", error);
}
};
// Reset tour (for testing or if user wants to see it again)
const resetTour = async () => {
try {
console.log("[useHasSeenTour] Resetting tour status");
await window.electron.ipcRenderer.invoke("store:set:userHasSeenTour", false);
setHasSeenTour(false);
} catch (error) {
console.error("[useHasSeenTour] Error resetting tour status:", error);
}
};
return {
hasSeenTour,
loading,
markTourAsSeen,
resetTour,
};
}