File size: 977 Bytes
b034029
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import { useEffect, useRef } from 'react';

export type HeaderRefreshHandler = () => void | Promise<void>;

let activeHeaderRefreshHandler: HeaderRefreshHandler | null = null;

export const triggerHeaderRefresh = async () => {
  if (!activeHeaderRefreshHandler) return;
  await activeHeaderRefreshHandler();
};

export const useHeaderRefresh = (handler?: HeaderRefreshHandler | null, enabled = true) => {
  const lastHandlerRef = useRef<HeaderRefreshHandler | null>(null);

  useEffect(() => {
    const previousHandler = lastHandlerRef.current;
    lastHandlerRef.current = handler ?? null;

    if (!enabled || !handler) {
      if (previousHandler && activeHeaderRefreshHandler === previousHandler) {
        activeHeaderRefreshHandler = null;
      }
      return;
    }

    activeHeaderRefreshHandler = handler;

    return () => {
      if (activeHeaderRefreshHandler === handler) {
        activeHeaderRefreshHandler = null;
      }
    };
  }, [enabled, handler]);
};