Initial release v1.0.0
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
"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,
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user