This commit is contained in:
@@ -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<FolderSelectorProps> = ({
|
||||
<Container className="p-6">
|
||||
{(loading && <p>Loading...</p>) ||
|
||||
(folders.length > 0 && (
|
||||
<ul>
|
||||
<>
|
||||
<h1>Select a Folder</h1>
|
||||
<div className="m-2 border-gray-200 border rounded-2xl max-h-96 overflow-y-auto">
|
||||
{folders.map((folder) => (
|
||||
<li key={folder.id}>{folder.name}</li>
|
||||
<button
|
||||
className="p-2 w-full flex hover:bg-gray-50 gap-2"
|
||||
key={folder.id}
|
||||
onClick={() => setSelectedFolderId(folder.id)}
|
||||
>
|
||||
<Folder />
|
||||
{folder.id}. {folder.name}
|
||||
</button>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
</>
|
||||
)) || <p>No folders found</p>}
|
||||
<LightButton onClick={cancel}>Cancel</LightButton>
|
||||
</Container>
|
||||
|
||||
@@ -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})` : ""}
|
||||
</label>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -67,8 +67,7 @@ export const getLocalStorageOperator = <T extends z.ZodTypeAny>(
|
||||
return {
|
||||
get: (): z.infer<T> => {
|
||||
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 = <T extends z.ZodTypeAny>(
|
||||
}
|
||||
},
|
||||
set: (data: z.infer<T>) => {
|
||||
if (!localStorage) return;
|
||||
localStorage.setItem(key, JSON.stringify(data));
|
||||
if (!globalThis.localStorage) return;
|
||||
globalThis.localStorage.setItem(key, JSON.stringify(data));
|
||||
return data;
|
||||
},
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user