Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 774 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

import React from 'react';
import { useDispatch } from 'react-redux';
import { axios } from '../../../../utils';
import { addNotification } from '../../../../redux/notification/notification.actions';

const ShareController = ({
  children,
  shareData,
  onInteraction,
  onSuccess,
  onError,
  onNonNativeShare,
  disabled
}) => {
  const dispatch = useDispatch();

  const getShareUrl = async (url = '') => {
    axios
      .get(url)
      .then(({ data }) => {
        if (!data.success) {
          dispatch(addNotification({ style: 'danger', msg: data.data }));
          throw new Error(data.data);
        }

        return data.data;
      })
      .catch((err) => {
        onError(err);
      });
  };

  const handleOnClick = async () => {
    onInteraction?.();
    if (navigator?.share) {
      try {
        const shareUrl = await getShareUrl(shareData.url);
        await navigator.share({ ...shareData, url: shareUrl });
        onSuccess?.();
      } catch (err) {
        dispatch(addNotification({ style: 'danger', msg: 'Error' }));
        onError?.(err);
      }
    } else if (window?.AndroidShareHandler) {
      try {
        window.AndroidShareHandler.share(shareData.url, '', '');
      } catch (error) {
        onError?.(error);
      }
    } else {
      onNonNativeShare?.();
    }
  };

  return (
    <button className='feed__action' onClick={handleOnClick} type='button' disabled={disabled}>
      {children}
    </button>
  );
};

export default ShareController;