OpenHands / frontend /src /utils /download-trajectory.ts
Backup-bdg's picture
Upload 565 files
b59aa07 verified
import { downloadJSON } from "./download-json";
function isSaveFilePickerSupported(): boolean {
return typeof window !== "undefined" && "showSaveFilePicker" in window;
}
export async function downloadTrajectory(
conversationId: string,
data: unknown[] | null,
): Promise<void> {
// Ensure data is an object for downloadJSON
const jsonData = data || {};
if (!isSaveFilePickerSupported()) {
// Fallback for browsers that don't support File System Access API (Safari, Firefox)
// This method dumps the JSON data right into the download folder
downloadJSON(jsonData as object, `trajectory-${conversationId}.json`);
return;
}
try {
const options: SaveFilePickerOptions = {
suggestedName: `trajectory-${conversationId}.json`,
types: [
{
description: "JSON File", // This is a file type description, not user-facing text
accept: {
"application/json": [".json"],
},
},
],
};
const fileHandle = await window.showSaveFilePicker(options);
const writable = await fileHandle.createWritable();
await writable.write(JSON.stringify(data, null, 2));
await writable.close();
} catch (error) {
// If an error occurs, fall back to the downloadJSON method
if (error instanceof Error && error.name !== "AbortError") {
downloadJSON(jsonData as object, `trajectory-${conversationId}.json`);
}
}
}