fix(ui): tolerate markdown parts without ids
This commit is contained in:
committed by
Shantur Rathore
parent
3d888fee64
commit
de66b1349a
@@ -34,6 +34,15 @@ function resolvePartVersion(part: TextPart, text: string): string {
|
|||||||
return `text-${hashText(text)}`
|
return `text-${hashText(text)}`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function resolvePartCacheId(part: TextPart, text: string): string {
|
||||||
|
const partId = typeof part.id === "string" && part.id.length > 0 ? part.id : ""
|
||||||
|
if (partId) {
|
||||||
|
return partId
|
||||||
|
}
|
||||||
|
|
||||||
|
return `anonymous:${hashText(text)}`
|
||||||
|
}
|
||||||
|
|
||||||
function decodeHtmlEntitiesLocally(content: string): string {
|
function decodeHtmlEntitiesLocally(content: string): string {
|
||||||
if (!content.includes("&") || typeof document === "undefined") {
|
if (!content.includes("&") || typeof document === "undefined") {
|
||||||
return content
|
return content
|
||||||
@@ -91,13 +100,11 @@ export function Markdown(props: MarkdownProps) {
|
|||||||
const text = decodeHtmlEntitiesLocally(rawText)
|
const text = decodeHtmlEntitiesLocally(rawText)
|
||||||
const themeKey = Boolean(props.isDark) ? "dark" : "light"
|
const themeKey = Boolean(props.isDark) ? "dark" : "light"
|
||||||
const highlightEnabled = !props.disableHighlight
|
const highlightEnabled = !props.disableHighlight
|
||||||
const partId = typeof part.id === "string" && part.id.length > 0 ? part.id : ""
|
const partId = typeof part.id === "string" && part.id.length > 0 ? part.id : undefined
|
||||||
if (!partId) {
|
const cacheId = resolvePartCacheId(part, text)
|
||||||
throw new Error("Markdown rendering requires a part id")
|
|
||||||
}
|
|
||||||
const version = resolvePartVersion(part, text)
|
const version = resolvePartVersion(part, text)
|
||||||
const requestKey = `${partId}:${themeKey}:${highlightEnabled ? 1 : 0}:${version}`
|
const requestKey = `${cacheId}:${themeKey}:${highlightEnabled ? 1 : 0}:${version}`
|
||||||
return { part, text, themeKey, highlightEnabled, partId, version, requestKey }
|
return { part, text, themeKey, highlightEnabled, partId, cacheId, version, requestKey }
|
||||||
})
|
})
|
||||||
|
|
||||||
const cacheHandle = useGlobalCache({
|
const cacheHandle = useGlobalCache({
|
||||||
@@ -105,8 +112,8 @@ export function Markdown(props: MarkdownProps) {
|
|||||||
sessionId: () => props.sessionId,
|
sessionId: () => props.sessionId,
|
||||||
scope: "markdown",
|
scope: "markdown",
|
||||||
cacheId: () => {
|
cacheId: () => {
|
||||||
const { partId, themeKey, highlightEnabled } = resolved()
|
const { cacheId, themeKey, highlightEnabled } = resolved()
|
||||||
return `${partId}:${themeKey}:${highlightEnabled ? 1 : 0}`
|
return `${cacheId}:${themeKey}:${highlightEnabled ? 1 : 0}`
|
||||||
},
|
},
|
||||||
version: () => resolved().version,
|
version: () => resolved().version,
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user