UNPKG

backsplash-app

Version:
71 lines (60 loc) 2.23 kB
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, }; }