mirror of
https://github.com/langgenius/dify.git
synced 2025-11-19 14:33:13 +00:00
Signed-off-by: lyzno1 <yuanyouhuilyz@gmail.com> Co-authored-by: Stream <Stream_2@qq.com> Co-authored-by: lyzno1 <92089059+lyzno1@users.noreply.github.com> Co-authored-by: zhsama <torvalds@linux.do> Co-authored-by: Harry <xh001x@hotmail.com> Co-authored-by: lyzno1 <yuanyouhuilyz@gmail.com> Co-authored-by: yessenia <yessenia.contact@gmail.com> Co-authored-by: hjlarry <hjlarry@163.com> Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: WTW0313 <twwu@dify.ai> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
49 lines
1.4 KiB
TypeScript
49 lines
1.4 KiB
TypeScript
/**
|
|
* @fileoverview Img component for rendering <img> tags in Markdown.
|
|
* Extracted from the main markdown renderer for modularity.
|
|
* Uses the ImageGallery component to display images.
|
|
*/
|
|
import React, { useEffect, useMemo, useState } from 'react'
|
|
import ImageGallery from '@/app/components/base/image-gallery'
|
|
import { getMarkdownImageURL } from './utils'
|
|
import { usePluginReadmeAsset } from '@/service/use-plugins'
|
|
import type { SimplePluginInfo } from '../markdown/react-markdown-wrapper'
|
|
|
|
type ImgProps = {
|
|
src: string
|
|
pluginInfo?: SimplePluginInfo
|
|
}
|
|
|
|
export const PluginImg: React.FC<ImgProps> = ({ src, pluginInfo }) => {
|
|
const { pluginUniqueIdentifier, pluginId } = pluginInfo || {}
|
|
const { data: assetData } = usePluginReadmeAsset({ plugin_unique_identifier: pluginUniqueIdentifier, file_name: src })
|
|
const [blobUrl, setBlobUrl] = useState<string>()
|
|
|
|
useEffect(() => {
|
|
if (!assetData) {
|
|
setBlobUrl(undefined)
|
|
return
|
|
}
|
|
|
|
const objectUrl = URL.createObjectURL(assetData)
|
|
setBlobUrl(objectUrl)
|
|
|
|
return () => {
|
|
URL.revokeObjectURL(objectUrl)
|
|
}
|
|
}, [assetData])
|
|
|
|
const imageUrl = useMemo(() => {
|
|
if (blobUrl)
|
|
return blobUrl
|
|
|
|
return getMarkdownImageURL(src, pluginId)
|
|
}, [blobUrl, pluginId, src])
|
|
|
|
return (
|
|
<div className="markdown-img-wrapper">
|
|
<ImageGallery srcs={[imageUrl]} />
|
|
</div>
|
|
)
|
|
}
|