Untitled

 avatar
unknown
jsx
2 years ago
3.5 kB
4
Indexable
import Link from "@/components/atoms/Link";
import React from "react";
import styles from "./NavigationIcons.module.scss";
import cn from "classnames";
import useMediaQuery from "hooks/useMediaQuery";

import { useState } from "react";
import { useEffect } from "react";
const NavigationIcons = ({ links, socialSharing, title, className }) => {
  const classes = cn(styles.icons, className);
  const isDesktop = useMediaQuery("(min-width: 768px)");
  const [siteURL, setSiteURL] = useState();
  console.log(title);

  useEffect(() => {
    if (typeof window !== "undefined") {
      const defaultLink =
        window.location.protocol +
        "//" +
        window.location.host +
        window.location.pathname;
      setSiteURL(defaultLink);
    }
  }, []);
  const mailLink = `mailto:?body=${title} 
  ${siteURL}
  `;
  const twitterLink = `https://twitter.com/intent/tweet?url=${siteURL}\n\n&text=${title}\n\n&via=TheGladesBrom`;
  const encodedTwitterLink = encodeURI(twitterLink);

  const encodedMailLink = encodeURI(mailLink);
  const defaultLinks = [
    { link_type: "facebook", link: generateSocialLink("facebook") },
    { link_type: "twitter", link: generateSocialLink("twitter") },
    { link_type: "email", link: generateSocialLink("email") },
  ];

  function generateSocialLink(platform) {
    let link = "";
    switch (platform) {
      case "facebook":
        return (link = `https://www.facebook.com/sharer/sharer.php?u=${siteURL}%2F&display=popup&ref=plugin&src=share_button`);
      case "twitter":
        return (link = encodedTwitterLink);
      case "email":
        return (link = encodedMailLink);
    }

    return link;
  }

  return (
    <ul className={classes}>
      {socialSharing &&
        !links &&
        defaultLinks.map((link) => {
          return (
            <li key={link.link_type}>
              <Link
                url={link?.link}
                className={styles[`icons_${link.link_type}`]}
                external={true}
              />
            </li>
          );
        })}
      {links &&
        links.length >= 1 &&
        links?.map((link) => {
          if (link.link_type === "telephone" && isDesktop && link.link !== "") {
            return (
              <li
                key={link.link_type}
                className={styles[`icons_${link.link_type}`]}
              >
                <Link
                  className={styles[`icons_${link.link_type}`]}
                  external={true}
                />
                <div className={styles[`icons_${link.link_type}_number`]}>
                  {link.link}
                </div>
              </li>
            );
          } else if (link.link_type !== "telephone") {
            if (link.link === "") {
              return null;
            } else {
              return (
                <li key={link.link_type}>
                  <Link
                    url={link?.link}
                    className={styles[`icons_${link.link_type}`]}
                    external={true}
                  />
                </li>
              );
            }
          } else if (link.link_type === "telephone" && !isDesktop) {
            return (
              <li key={link.link_type}>
                <Link
                  url={`tel:${link?.link}`}
                  className={styles[`icons_${link.link_type}`]}
                  external={true}
                />
              </li>
            );
          }
        })}
    </ul>
  );
};

export default NavigationIcons;
Editor is loading...