2025-01-23 18:19:04 -05:00
|
|
|
import { useMemo } from 'react';
|
|
|
|
|
import { removeNullishValues } from 'librechat-data-provider';
|
|
|
|
|
import type { Artifact } from '~/common';
|
|
|
|
|
import { getKey, getProps, getTemplate, getArtifactFilename } from '~/utils/artifacts';
|
|
|
|
|
import { getMermaidFiles } from '~/utils/mermaid';
|
2025-10-11 23:37:35 +09:00
|
|
|
import { getMarkdownFiles } from '~/utils/markdown';
|
2025-01-23 18:19:04 -05:00
|
|
|
|
|
|
|
|
export default function useArtifactProps({ artifact }: { artifact: Artifact }) {
|
|
|
|
|
const [fileKey, files] = useMemo(() => {
|
2025-10-11 23:37:35 +09:00
|
|
|
const key = getKey(artifact.type ?? '', artifact.language);
|
|
|
|
|
const type = artifact.type ?? '';
|
|
|
|
|
|
|
|
|
|
if (key.includes('mermaid')) {
|
|
|
|
|
return ['diagram.mmd', getMermaidFiles(artifact.content ?? '')];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (type === 'text/markdown' || type === 'text/md' || type === 'text/plain') {
|
|
|
|
|
return ['content.md', getMarkdownFiles(artifact.content ?? '')];
|
2025-01-23 18:19:04 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const fileKey = getArtifactFilename(artifact.type ?? '', artifact.language);
|
|
|
|
|
const files = removeNullishValues({
|
|
|
|
|
[fileKey]: artifact.content,
|
|
|
|
|
});
|
|
|
|
|
return [fileKey, files];
|
|
|
|
|
}, [artifact.type, artifact.content, artifact.language]);
|
|
|
|
|
|
|
|
|
|
const template = useMemo(
|
|
|
|
|
() => getTemplate(artifact.type ?? '', artifact.language),
|
|
|
|
|
[artifact.type, artifact.language],
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
const sharedProps = useMemo(() => getProps(artifact.type ?? ''), [artifact.type]);
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
files,
|
|
|
|
|
fileKey,
|
|
|
|
|
template,
|
|
|
|
|
sharedProps,
|
|
|
|
|
};
|
|
|
|
|
}
|