From 44693776b2735f47c55cc154beaa8af91c9c4905 Mon Sep 17 00:00:00 2001 From: Ren Amamiya <123083837+reyamir@users.noreply.github.com> Date: Mon, 20 Mar 2023 11:20:01 +0700 Subject: [PATCH] updated note preview component --- src/components/imageWithFallback.tsx | 9 ++- src/components/note/content/index.tsx | 57 ++----------------- src/components/note/content/preview.tsx | 43 ++++++++++++++ .../note/content/preview/imageCard.tsx | 22 ------- src/components/note/content/preview/video.tsx | 18 ------ src/components/note/preview/image.tsx | 23 ++++++++ .../preview/linkCard.tsx => preview/link.tsx} | 5 +- src/components/note/preview/video.tsx | 10 ++++ 8 files changed, 90 insertions(+), 97 deletions(-) create mode 100644 src/components/note/content/preview.tsx delete mode 100644 src/components/note/content/preview/imageCard.tsx delete mode 100644 src/components/note/content/preview/video.tsx create mode 100644 src/components/note/preview/image.tsx rename src/components/note/{content/preview/linkCard.tsx => preview/link.tsx} (81%) create mode 100644 src/components/note/preview/video.tsx diff --git a/src/components/imageWithFallback.tsx b/src/components/imageWithFallback.tsx index 268b908f..97831cc3 100644 --- a/src/components/imageWithFallback.tsx +++ b/src/components/imageWithFallback.tsx @@ -30,7 +30,14 @@ export const ImageWithFallback = memo(function ImageWithFallback({ colors={['#FEE2E2', '#FEF3C7', '#F59E0B', '#EC4899', '#D946EF', '#8B5CF6']} /> ) : ( - {alt} + {alt} )} ); diff --git a/src/components/note/content/index.tsx b/src/components/note/content/index.tsx index 55df8dad..d3099a66 100644 --- a/src/components/note/content/index.tsx +++ b/src/components/note/content/index.tsx @@ -1,11 +1,9 @@ import NoteMetadata from '@components/note/content/metadata'; -import { ImageCard } from '@components/note/content/preview/imageCard'; -import { Video } from '@components/note/content/preview/video'; +import NotePreview from '@components/note/content/preview'; import { UserExtend } from '@components/user/extend'; import dynamic from 'next/dynamic'; -import { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react'; -import ReactPlayer from 'react-player'; +import { memo } from 'react'; const MarkdownPreview = dynamic(() => import('@uiw/react-markdown-preview'), { ssr: false, @@ -13,53 +11,6 @@ const MarkdownPreview = dynamic(() => import('@uiw/react-markdown-preview'), { }); export const Content = memo(function Content({ data }: { data: any }) { - const [preview, setPreview] = useState({}); - - const content = useRef(data.content); - const urls = useMemo( - () => - content.current.match( - /((http|ftp|https):\/\/)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)?/gi - ), - [] - ); - - useEffect(() => { - if (urls !== null && urls.length > 0) { - // #TODO: support multiple url - let url = urls[0]; - // make sure url alway have http:// - if (!/^https?:\/\//i.test(url)) { - url = 'http://' + url; - } - // parse url with new URL(); - const parseURL = new URL(url, 'https://uselume.xyz'); - // #TODO performance test - if (parseURL.pathname.toLowerCase().match(/\.(jpg|jpeg|gif|png|webp)$/)) { - // add image to preview - setPreview({ image: parseURL.href, type: 'image' }); - content.current = content.current.replace(parseURL.href, ''); - } else if (ReactPlayer.canPlay(parseURL.href)) { - // add video to preview - setPreview({ url: parseURL.href, type: 'video' }); - content.current = content.current.replace(parseURL.href, ''); - } // #TODO: support multiple preview - } - }, [urls]); - - const previewAttachment = useCallback(() => { - if (Object.keys(preview).length > 0) { - switch (preview['type']) { - case 'image': - return ; - case 'video': - return