Files
+4
YeuolyGitHubStreamlyzno1zhsamaHarrylyzno1yesseniahjlarrygemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>WTW0313Copilot
b76e17b25d feat: introduce trigger functionality (#27644)
Signed-off-by: lyzno1 <[email protected]>
Co-authored-by: Stream <[email protected]>
Co-authored-by: lyzno1 <[email protected]>
Co-authored-by: zhsama <[email protected]>
Co-authored-by: Harry <[email protected]>
Co-authored-by: lyzno1 <[email protected]>
Co-authored-by: yessenia <[email protected]>
Co-authored-by: hjlarry <[email protected]>
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 <[email protected]>
Co-authored-by: Copilot <[email protected]>
2025-11-12 17:59:37 +08:00

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>
)
}