Skip to content

Commit

Permalink
Merge pull request ChatGPTNextWeb#2636 from wangwentong-lunaon/main
Browse files Browse the repository at this point in the history
  • Loading branch information
Yidadaa authored Aug 15, 2023
2 parents 26456c8 + b883988 commit 0518f16
Showing 1 changed file with 49 additions and 12 deletions.
61 changes: 49 additions & 12 deletions app/components/exporter.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ export function MessageExporter() {
];
const { currentStep, setCurrentStepIndex, currentStepIndex } =
useSteps(steps);
const formats = ["text", "image"] as const;
const formats = ["text", "image", "json"] as const;
type ExportFormat = (typeof formats)[number];

const [exportConfig, setExportConfig] = useState({
Expand Down Expand Up @@ -157,7 +157,21 @@ export function MessageExporter() {
session.mask.context,
selection,
]);

function preview() {
if (exportConfig.format === "text") {
return (
<MarkdownPreviewer messages={selectedMessages} topic={session.topic} />
);
} else if (exportConfig.format === "json") {
return (
<JsonPreviewer messages={selectedMessages} topic={session.topic} />
);
} else {
return (
<ImagePreviewer messages={selectedMessages} topic={session.topic} />
);
}
}
return (
<>
<Steps
Expand Down Expand Up @@ -212,16 +226,7 @@ export function MessageExporter() {
/>
</div>
{currentStep.value === "preview" && (
<div className={styles["message-exporter-body"]}>
{exportConfig.format === "text" ? (
<MarkdownPreviewer
messages={selectedMessages}
topic={session.topic}
/>
) : (
<ImagePreviewer messages={selectedMessages} topic={session.topic} />
)}
</div>
<div className={styles["message-exporter-body"]}>{preview()}</div>
)}
</>
);
Expand Down Expand Up @@ -545,12 +550,44 @@ export function MarkdownPreviewer(props: {
const download = () => {
downloadAs(mdText, `${props.topic}.md`);
};
return (
<>
<PreviewActions
copy={copy}
download={download}
showCopy={true}
messages={props.messages}
/>
<div className="markdown-body">
<pre className={styles["export-content"]}>{mdText}</pre>
</div>
</>
);
}

export function JsonPreviewer(props: {
messages: ChatMessage[];
topic: string;
}) {
const msgs = props.messages.map((m) => ({
role: m.role,
content: m.content,
}));
const mdText = "\n" + JSON.stringify(msgs, null, 2) + "\n";

const copy = () => {
copyToClipboard(JSON.stringify(msgs, null, 2));
};
const download = () => {
downloadAs(JSON.stringify(msgs, null, 2), `${props.topic}.json`);
};

return (
<>
<PreviewActions
copy={copy}
download={download}
showCopy={true}
messages={props.messages}
/>
<div className="markdown-body">
Expand Down

0 comments on commit 0518f16

Please sign in to comment.