All files / src/shared/components/FiltersPanel useFiltersPanelState.ts

90.69% Statements 39/43
75% Branches 6/8
100% Functions 1/1
90.69% Lines 39/43

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 40 41 42 43 44 45 46 47 48 491x   1x 32x 32x 32x 32x   32x 1x 32x   32x 1x 1x 1x     1x 1x 1x 1x 1x 32x   32x 7x     7x 7x 7x 7x 32x   32x 32x 32x 32x 32x 32x 32x 32x 32x 32x 32x 32x 32x  
import { useCallback, useState } from 'react';
 
export const useFiltersPanelState = (initialPinned: boolean = false) => {
  const [collapsed, setCollapsed] = useState(false);
  const [tabVisible, setTabVisible] = useState(false);
  const [contentVisible, setContentVisible] = useState(true);
  const [isPinned, setIsPinned] = useState(initialPinned);
 
  const togglePin = useCallback(() => {
    setIsPinned((prev) => !prev);
  }, []);
 
  const toggleCollapse = useCallback(() => {
    setCollapsed((prev) => {
      const next = !prev;
      if (!next) {
        setTabVisible(false);
        setTimeout(() => setContentVisible(true), 1500);
      } else {
        setContentVisible(false);
      }
      return next;
    });
  }, []);
 
  const handleTabVisible = useCallback(() => {
    if (collapsed) {
      setTabVisible(false);
      setContentVisible(true);
    } else {
      setTabVisible(true);
      setTimeout(() => setContentVisible(true), 1500);
    }
  }, []);
 
  return {
    collapsed,
    contentVisible,
    tabVisible,
    isPinned,
    togglePin,
    toggleCollapse,
    setTabVisible,
    setCollapsed,
    setContentVisible,
    handleTabVisible,
  };
};