Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
3719 stevensc 1
import React from 'react';
2
import { useDispatch } from 'react-redux';
3
import { axios } from '../../../../utils';
4
import { addNotification } from '../../../../redux/notification/notification.actions';
5
 
6
const ShareController = ({
7
  children,
8
  shareData,
9
  onInteraction,
10
  onSuccess,
11
  onError,
12
  onNonNativeShare,
13
  disabled
14
}) => {
15
  const dispatch = useDispatch();
16
 
17
  const getShareUrl = async (url = '') => {
18
    axios
19
      .get(url)
20
      .then(({ data }) => {
21
        if (!data.success) {
22
          dispatch(addNotification({ style: 'danger', msg: data.data }));
23
          throw new Error(data.data);
24
        }
25
 
26
        return data.data;
27
      })
28
      .catch((err) => {
29
        onError(err);
30
      });
31
  };
32
 
33
  const handleOnClick = async () => {
34
    onInteraction?.();
35
    if (navigator?.share) {
36
      try {
37
        const shareUrl = await getShareUrl(shareData.url);
38
        await navigator.share({ ...shareData, url: shareUrl });
39
        onSuccess?.();
40
      } catch (err) {
41
        dispatch(addNotification({ style: 'danger', msg: 'Error' }));
42
        onError?.(err);
43
      }
44
    } else if (window?.AndroidShareHandler) {
45
      try {
46
        window.AndroidShareHandler.share(shareData.url, '', '');
47
      } catch (error) {
48
        onError?.(error);
49
      }
50
    } else {
51
      onNonNativeShare?.();
52
    }
53
  };
54
 
55
  return (
56
    <button className='feed__action' onClick={handleOnClick} type='button' disabled={disabled}>
57
      {children}
58
    </button>
59
  );
60
};
61
 
62
export default ShareController;