Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 367 | Rev 774 | 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 = "") => {
361 stevensc 18
    axios
348 stevensc 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) {
360 stevensc 42
        dispatch(addNotification({ style: "danger", msg: "Error" }));
348 stevensc 43
        onError?.(err);
357 stevensc 44
        throw new Error(err);
348 stevensc 45
      }
359 stevensc 46
    } else if (window?.AndroidShareHandler) {
357 stevensc 47
      try {
368 stevensc 48
        window.AndroidShareHandler.share(shareData.url, "", "");
357 stevensc 49
      } catch (error) {
50
        throw new Error(err);
51
      }
348 stevensc 52
    } else {
53
      onNonNativeShare?.();
54
    }
55
  };
56
 
57
  return (
351 stevensc 58
    <button
59
      className="feed__action"
60
      onClick={handleOnClick}
61
      type="button"
62
      disabled={disabled}
63
    >
348 stevensc 64
      {children}
65
    </button>
66
  );
67
};
68
 
69
export default ShareController;