feat: add export functionality to MemoryContent and TeamMemoryManager components, allowing users to download memory as markdown files

This commit is contained in:
Anish Sarkar 2026-04-10 02:31:59 +05:30
parent c06b82647d
commit fdbb6200a6
2 changed files with 58 additions and 4 deletions

View file

@ -1,7 +1,7 @@
"use client";
import { useAtomValue } from "jotai";
import { Info, Send } from "lucide-react";
import { Download, Info, Send } from "lucide-react";
import { useCallback, useEffect, useRef, useState } from "react";
import { toast } from "sonner";
import { z } from "zod";
@ -78,6 +78,23 @@ export function MemoryContent() {
}
};
const handleExport = () => {
if (!memory) return;
try {
const blob = new Blob([memory], { type: "text/markdown;charset=utf-8" });
const url = URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = url;
a.download = "personal-memory.md";
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
URL.revokeObjectURL(url);
} catch {
toast.error("Failed to export memory");
}
};
const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {
if (e.key === "Enter" && !e.shiftKey) {
e.preventDefault();
@ -168,7 +185,7 @@ export function MemoryContent() {
</Button>
</div>
<div className="flex justify-start">
<div className="flex items-center gap-2">
<Button
type="button"
variant="destructive"
@ -178,6 +195,16 @@ export function MemoryContent() {
>
Reset Memory
</Button>
<Button
type="button"
variant="outline"
size="sm"
onClick={handleExport}
disabled={!memory}
>
<Download className="h-4 w-4" />
Export
</Button>
</div>
</div>
);

View file

@ -2,7 +2,7 @@
import { useQuery, useQueryClient } from "@tanstack/react-query";
import { useAtomValue } from "jotai";
import { Info, Send } from "lucide-react";
import { Download, Info, Send } from "lucide-react";
import { useRef, useState } from "react";
import { toast } from "sonner";
import { z } from "zod";
@ -83,6 +83,23 @@ export function TeamMemoryManager({ searchSpaceId }: TeamMemoryManagerProps) {
}
};
const handleExport = () => {
if (!memory) return;
try {
const blob = new Blob([memory], { type: "text/markdown;charset=utf-8" });
const url = URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = url;
a.download = "team-memory.md";
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
URL.revokeObjectURL(url);
} catch {
toast.error("Failed to export team memory");
}
};
const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {
if (e.key === "Enter" && !e.shiftKey) {
e.preventDefault();
@ -175,7 +192,7 @@ export function TeamMemoryManager({ searchSpaceId }: TeamMemoryManagerProps) {
</Button>
</div>
<div className="flex justify-start">
<div className="flex items-center gap-2">
<Button
type="button"
variant="destructive"
@ -185,6 +202,16 @@ export function TeamMemoryManager({ searchSpaceId }: TeamMemoryManagerProps) {
>
Clear Memory
</Button>
<Button
type="button"
variant="outline"
size="sm"
onClick={handleExport}
disabled={!memory}
>
<Download className="h-4 w-4" />
Export
</Button>
</div>
</div>
);