This commit is contained in:
@@ -3,6 +3,7 @@ import { useEffect, useState } from "react";
|
|||||||
import { folder } from "../../../../generated/prisma/browser";
|
import { folder } from "../../../../generated/prisma/browser";
|
||||||
import { getFoldersByOwner } from "@/lib/services/folderService";
|
import { getFoldersByOwner } from "@/lib/services/folderService";
|
||||||
import LightButton from "@/components/buttons/LightButton";
|
import LightButton from "@/components/buttons/LightButton";
|
||||||
|
import { Folder } from "lucide-react";
|
||||||
|
|
||||||
interface FolderSelectorProps {
|
interface FolderSelectorProps {
|
||||||
setSelectedFolderId: (id: number) => void;
|
setSelectedFolderId: (id: number) => void;
|
||||||
@@ -31,11 +32,21 @@ const FolderSelector: React.FC<FolderSelectorProps> = ({
|
|||||||
<Container className="p-6">
|
<Container className="p-6">
|
||||||
{(loading && <p>Loading...</p>) ||
|
{(loading && <p>Loading...</p>) ||
|
||||||
(folders.length > 0 && (
|
(folders.length > 0 && (
|
||||||
<ul>
|
<>
|
||||||
{folders.map((folder) => (
|
<h1>Select a Folder</h1>
|
||||||
<li key={folder.id}>{folder.name}</li>
|
<div className="m-2 border-gray-200 border rounded-2xl max-h-96 overflow-y-auto">
|
||||||
))}
|
{folders.map((folder) => (
|
||||||
</ul>
|
<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>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
)) || <p>No folders found</p>}
|
)) || <p>No folders found</p>}
|
||||||
<LightButton onClick={cancel}>Cancel</LightButton>
|
<LightButton onClick={cancel}>Cancel</LightButton>
|
||||||
</Container>
|
</Container>
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import {
|
|||||||
import { toast } from "sonner";
|
import { toast } from "sonner";
|
||||||
import FolderSelector from "./FolderSelector";
|
import FolderSelector from "./FolderSelector";
|
||||||
import { useSession } from "next-auth/react";
|
import { useSession } from "next-auth/react";
|
||||||
|
import { createTextPair } from "@/lib/services/textPairService";
|
||||||
|
|
||||||
export default function TranslatorPage() {
|
export default function TranslatorPage() {
|
||||||
const t = useTranslations("translator");
|
const t = useTranslations("translator");
|
||||||
@@ -106,6 +107,33 @@ export default function TranslatorPage() {
|
|||||||
locale2: llmres.locale2,
|
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;
|
historyUpdated = true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -281,11 +309,13 @@ export default function TranslatorPage() {
|
|||||||
toast.warning("Please login to enable auto-save");
|
toast.warning("Please login to enable auto-save");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (checked === false) setAutoSaveFolderId(null);
|
||||||
setAutoSave(checked);
|
setAutoSave(checked);
|
||||||
}}
|
}}
|
||||||
className="mr-2"
|
className="mr-2"
|
||||||
/>
|
/>
|
||||||
{t("autoSave")}
|
{t("autoSave")}
|
||||||
|
{autoSaveFolderId ? ` (${autoSaveFolderId})` : ""}
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -67,8 +67,7 @@ export const getLocalStorageOperator = <T extends z.ZodTypeAny>(
|
|||||||
return {
|
return {
|
||||||
get: (): z.infer<T> => {
|
get: (): z.infer<T> => {
|
||||||
try {
|
try {
|
||||||
if (!localStorage) return [];
|
const item = globalThis.localStorage.getItem(key);
|
||||||
const item = localStorage.getItem(key);
|
|
||||||
|
|
||||||
if (!item) return [];
|
if (!item) return [];
|
||||||
|
|
||||||
@@ -90,8 +89,8 @@ export const getLocalStorageOperator = <T extends z.ZodTypeAny>(
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
set: (data: z.infer<T>) => {
|
set: (data: z.infer<T>) => {
|
||||||
if (!localStorage) return;
|
if (!globalThis.localStorage) return;
|
||||||
localStorage.setItem(key, JSON.stringify(data));
|
globalThis.localStorage.setItem(key, JSON.stringify(data));
|
||||||
return data;
|
return data;
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user