Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 355 | Rev 357 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

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