From 22a0cf46fb82da9251e0c3cc86a9e42aace093b8 Mon Sep 17 00:00:00 2001 From: goddonebianu Date: Mon, 17 Nov 2025 09:00:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=BF=BB=E8=AF=91=E5=99=A8?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E4=BF=9D=E5=AD=98=E5=88=B0=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=A4=B9=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../(features)/translator/FolderSelector.tsx | 21 +++++++++---- src/app/(features)/translator/page.tsx | 30 +++++++++++++++++++ src/lib/utils.ts | 7 ++--- 3 files changed, 49 insertions(+), 9 deletions(-) diff --git a/src/app/(features)/translator/FolderSelector.tsx b/src/app/(features)/translator/FolderSelector.tsx index 6309a10..3d7f125 100644 --- a/src/app/(features)/translator/FolderSelector.tsx +++ b/src/app/(features)/translator/FolderSelector.tsx @@ -3,6 +3,7 @@ import { useEffect, useState } from "react"; import { folder } from "../../../../generated/prisma/browser"; import { getFoldersByOwner } from "@/lib/services/folderService"; import LightButton from "@/components/buttons/LightButton"; +import { Folder } from "lucide-react"; interface FolderSelectorProps { setSelectedFolderId: (id: number) => void; @@ -31,11 +32,21 @@ const FolderSelector: React.FC = ({ {(loading &&

Loading...

) || (folders.length > 0 && ( -
    - {folders.map((folder) => ( -
  • {folder.name}
  • - ))} -
+ <> +

Select a Folder

+
+ {folders.map((folder) => ( + + ))} +
+ )) ||

No folders found

} Cancel
diff --git a/src/app/(features)/translator/page.tsx b/src/app/(features)/translator/page.tsx index bb2cb75..9d337ed 100644 --- a/src/app/(features)/translator/page.tsx +++ b/src/app/(features)/translator/page.tsx @@ -22,6 +22,7 @@ import { import { toast } from "sonner"; import FolderSelector from "./FolderSelector"; import { useSession } from "next-auth/react"; +import { createTextPair } from "@/lib/services/textPairService"; export default function TranslatorPage() { const t = useTranslations("translator"); @@ -106,6 +107,33 @@ export default function TranslatorPage() { locale2: llmres.locale2, }), ); + if (autoSave && autoSaveFolderId) { + createTextPair({ + text1: llmres.text1, + text2: llmres.text2, + locale1: llmres.locale1, + locale2: llmres.locale2, + folders: { + connect: { + id: autoSaveFolderId, + }, + }, + }) + .then(() => { + toast.success( + llmres.text1 + "保存到文件夹" + autoSaveFolderId + "成功", + ); + }) + .catch((error) => { + toast.error( + llmres.text1 + + "保存到文件夹" + + autoSaveFolderId + + "失败:" + + error.message, + ); + }); + } historyUpdated = true; } }; @@ -281,11 +309,13 @@ export default function TranslatorPage() { toast.warning("Please login to enable auto-save"); return; } + if (checked === false) setAutoSaveFolderId(null); setAutoSave(checked); }} className="mr-2" /> {t("autoSave")} + {autoSaveFolderId ? ` (${autoSaveFolderId})` : ""} diff --git a/src/lib/utils.ts b/src/lib/utils.ts index e378170..c93cbd1 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -67,8 +67,7 @@ export const getLocalStorageOperator = ( return { get: (): z.infer => { try { - if (!localStorage) return []; - const item = localStorage.getItem(key); + const item = globalThis.localStorage.getItem(key); if (!item) return []; @@ -90,8 +89,8 @@ export const getLocalStorageOperator = ( } }, set: (data: z.infer) => { - if (!localStorage) return; - localStorage.setItem(key, JSON.stringify(data)); + if (!globalThis.localStorage) return; + globalThis.localStorage.setItem(key, JSON.stringify(data)); return data; }, };