Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 774 | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

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