52 lines
1.3 KiB
TypeScript
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,
|
|
};
|
|
}
|