Files
lidify/frontend/hooks/useActivityPanel.ts
2025-12-25 18:58:06 -06:00

52 lines
1.3 KiB
TypeScript

"use client";
import { useState, useEffect, useCallback } from "react";
const ACTIVITY_PANEL_KEY = "lidify_activity_panel_open";
export function useActivityPanel() {
const [isOpen, setIsOpen] = useState(false);
const [activeTab, setActiveTab] = useState<"notifications" | "active" | "history">("notifications");
const [isInitialized, setIsInitialized] = useState(false);
// Load state from localStorage on mount
useEffect(() => {
if (typeof window !== "undefined") {
const stored = localStorage.getItem(ACTIVITY_PANEL_KEY);
if (stored === "true") {
setIsOpen(true);
}
setIsInitialized(true);
}
}, []);
// Persist state to localStorage
useEffect(() => {
if (isInitialized && typeof window !== "undefined") {
localStorage.setItem(ACTIVITY_PANEL_KEY, isOpen ? "true" : "false");
}
}, [isOpen, isInitialized]);
const toggle = useCallback(() => {
setIsOpen((prev) => !prev);
}, []);
const open = useCallback(() => {
setIsOpen(true);
}, []);
const close = useCallback(() => {
setIsOpen(false);
}, []);
return {
isOpen,
activeTab,
setActiveTab,
toggle,
open,
close,
isInitialized,
};
}