All files / src/hooks useUI.js

96.42% Statements 27/28
75% Branches 6/8
100% Functions 7/7
100% Lines 19/19

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39      22x 22x 22x 22x 22x 22x   22x 1x 1x 1x       22x 13x 3x 3x 2x 1x   13x 13x     22x                    
import { useState, useEffect } from 'react';
 
export function useUI() {
  const [isSidebarOpen, setIsSidebarOpen] = useState(false);
  const [isFullscreen, setIsFullscreen] = useState(false);
  const [showKnowledge, setShowKnowledge] = useState(false);
  const [viewSource, setViewSource] = useState(null);
  const [copied, setCopied] = useState(false);
  const [journalOpen, setJournalOpen] = useState(false);
 
  const copyToClipboard = (text) => {
    navigator.clipboard.writeText(text).then(() => {
      setCopied(true);
      setTimeout(() => setCopied(false), 2000);
    });
  };
 
  useEffect(() => {
    const handleEscape = (e) => {
      Iif (e.key !== 'Escape') return;
      if (viewSource) { setViewSource(null); return; }
      if (showKnowledge) { setShowKnowledge(false); return; }
      Eif (isFullscreen) { setIsFullscreen(false); return; }
    };
    document.addEventListener('keydown', handleEscape);
    return () => document.removeEventListener('keydown', handleEscape);
  }, [viewSource, showKnowledge, isFullscreen]);
 
  return {
    isSidebarOpen, setIsSidebarOpen,
    isFullscreen, setIsFullscreen,
    showKnowledge, setShowKnowledge,
    viewSource, setViewSource,
    copied, setCopied,
    journalOpen, setJournalOpen,
    copyToClipboard,
  };
}