Загрузка данных


import { useCallback, useEffect, useRef } from 'react';

type UsePreservedSipUriParams = {
  sipUri?: string | null;
  hasSipUri?: boolean | null;
};

type UsePreservedSipUriResult = {
  getPreservedSipUri: () => string;
  setPreservedSipUri: (value?: string | null) => void;
  resetPreservedSipUri: () => void;
};

export const usePreservedSipUri = ({
  sipUri,
  hasSipUri,
}: UsePreservedSipUriParams): UsePreservedSipUriResult => {
  const preservedSipUriRef = useRef('');

  const setPreservedSipUri = useCallback((value?: string | null) => {
    preservedSipUriRef.current = value ?? '';
  }, []);

  const resetPreservedSipUri = useCallback(() => {
    setPreservedSipUri('');
  }, [setPreservedSipUri]);

  const getPreservedSipUri = useCallback(() => {
    return preservedSipUriRef.current;
  }, []);

  useEffect(() => {
    if (typeof sipUri !== 'string') {
      return;
    }

    if (hasSipUri || sipUri !== '') {
      setPreservedSipUri(sipUri);
    }
  }, [hasSipUri, sipUri, setPreservedSipUri]);

  return {
    getPreservedSipUri,
    setPreservedSipUri,
    resetPreservedSipUri,
  };
};