Rev 367 | Rev 774 | Ir a la última revisión | 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(err);
}
return data.data;
})
.catch((err) => {
onError(err);
throw new Error(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);
throw new Error(err);
}
} else if (window?.AndroidShareHandler) {
try {
window.AndroidShareHandler.share(shareData.url, "", "");
} catch (error) {
throw new Error(err);
}
} else {
onNonNativeShare?.();
}
};
return (
<button
className="feed__action"
onClick={handleOnClick}
type="button"
disabled={disabled}
>
{children}
</button>
);
};
export default ShareController;