Spaces:
Runtime error
Runtime error
File size: 1,869 Bytes
cd6f98e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | import { pdf } from "@react-pdf/renderer";
import { i18n } from "next-i18next";
import React, { memo } from "react";
import { FaFilePdf } from "react-icons/fa";
import type { Message } from "../../types/message";
import { MESSAGE_TYPE_GOAL } from "../../types/message";
import { MESSAGE_TYPE_TASK } from "../../types/task";
import WindowButton from "../WindowButton";
const PDFButton = ({ messages, name }: { messages: Message[]; name: string }) => {
const textSections = getTextSections(messages);
const downloadPDF = async () => {
const MyDocument = (await import("./MyDocument")).default as React.FC<{
textSections: string[];
}>;
const blob = await pdf(<MyDocument textSections={textSections} />).toBlob();
const url = URL.createObjectURL(blob);
const link = document.createElement("a");
link.href = url;
link.download = "my-document.pdf";
link.click();
URL.revokeObjectURL(url);
};
return (
<>
<WindowButton
onClick={() => {
downloadPDF().catch(console.error);
}}
icon={<FaFilePdf size={12} />}
text={name}
/>
</>
);
};
const getTextSections = (messages: Message[]): string[] => {
// Note "Thinking" messages have no `value` so they show up as new lines
return messages
.map((message) => {
if (message.type == MESSAGE_TYPE_GOAL) {
return `${i18n?.t("LABEL_AGENT_GOAL", { ns: "indexPage" })}: ${message.value}`;
}
if (message.type == MESSAGE_TYPE_TASK) {
if (message.info) {
return `${i18n?.t("EXECUTING", { ns: "common" })}: "${message.value}": ${message.info}`;
} else {
return `${i18n?.t("ADDING_TASK", { ns: "common" })}: ${message.value}`;
}
}
return message.value;
})
.filter((message) => message !== "");
};
export default memo(PDFButton);
|