import { DOMNode, domToReact } from "html-react-parser"; import { Element, Text } from "domhandler/lib/node"; import Img from "../components/conversation/image/Image"; import Player from "../components/conversation/comment/player"; import TweetEmbed from "../components/conversation/comment/twitter"; import { LinkPreview } from "@dhaiwat10/react-link-preview"; import { Box } from "@mui/material"; import axios from "axios"; import Loader from "./loader"; import { regex } from "./regex"; import SocialMediaEmbed from "../components/conversation/comment/socialMediaEmbed"; import React from "react"; export const replace = (params: { quote?: boolean }) => { const { quote } = params; return (node: DOMNode) => { const domNode = node as Element; if (domNode.attribs) { try { if (domNode.name === "a") { const href: string = domNode.attribs?.href; if ( [regex.facebook.videos, regex.youtube] .flat() .some((item) => href.match(item)) ) { return ( {domToReact([node])} ); } else if (regex.twitter.some((item) => href.match(item))) { const url = new URL(href); const tweetId = url.pathname.split("/").pop(); if (tweetId) return (
{domToReact([node])}
); } else if ( [regex.instagram, regex.facebook.posts] .flat() .some((item) => href.match(item)) ) { return ( {domToReact([node])} ); } // TODO: embed instagram and facebook const firstChild = domNode.children?.[0] as Element; if ( domNode.children?.length === 1 && firstChild?.name === "img" && firstChild?.attribs ) { const { src, height, width, style } = firstChild.attribs; if (src && domNode.attribs.href === src) { return ( ); } } else if ( (firstChild as unknown as Text)?.type === "text" && domNode?.attribs?.href === (firstChild as unknown as Text)?.data ) { return ( { const { data } = await axios.get( `https://rlp.metahkg.org/v2?url=${url}` ); return data.metadata; }} customLoader={ } /> {domToReact([node])} ); } } if (domNode.name === "img" && domNode.attribs?.src) { const { src, height, width, style } = domNode.attribs; return ( ); } } catch {} } }; };