refactor: Remove unused volume fields and improve error handling in novel and chapter management
Build and Push Reader Image / docker (push) Successful in 40s
Build and Push Reader Image / docker (push) Successful in 40s
This commit is contained in:
@@ -39,9 +39,6 @@ export function EditorClient({ chapterId }: { chapterId: string }) {
|
||||
|
||||
// Core states
|
||||
const [number, setNumber] = useState("")
|
||||
const [volumeNumber, setVolumeNumber] = useState("")
|
||||
const [volumeTitle, setVolumeTitle] = useState("")
|
||||
const [volumeChapterNumber, setVolumeChapterNumber] = useState("")
|
||||
const [title, setTitle] = useState("")
|
||||
const [content, setContent] = useState("")
|
||||
const [originalNovelId, setOriginalNovelId] = useState("")
|
||||
@@ -80,9 +77,6 @@ export function EditorClient({ chapterId }: { chapterId: string }) {
|
||||
const data = await res.json()
|
||||
|
||||
setNumber(data.number.toString())
|
||||
setVolumeNumber(data.volumeNumber ? String(data.volumeNumber) : "")
|
||||
setVolumeTitle(data.volumeTitle || "")
|
||||
setVolumeChapterNumber(data.volumeChapterNumber ? String(data.volumeChapterNumber) : "")
|
||||
setTitle(data.title)
|
||||
setContent(data.content)
|
||||
setOriginalNovelId(data.novelId)
|
||||
@@ -195,9 +189,6 @@ export function EditorClient({ chapterId }: { chapterId: string }) {
|
||||
id: chapterId,
|
||||
novelId: originalNovelId,
|
||||
number: parseInt(number),
|
||||
volumeNumber: volumeNumber ? parseInt(volumeNumber) : null,
|
||||
volumeTitle: volumeTitle.trim() || null,
|
||||
volumeChapterNumber: volumeChapterNumber ? parseInt(volumeChapterNumber) : null,
|
||||
title,
|
||||
content
|
||||
})
|
||||
@@ -486,23 +477,11 @@ export function EditorClient({ chapterId }: { chapterId: string }) {
|
||||
|
||||
{/* Editor Workspace */}
|
||||
<div className="flex flex-col flex-1 pb-4 min-h-0">
|
||||
<div className="grid grid-cols-1 md:grid-cols-6 gap-4 mb-4 shrink-0">
|
||||
<div className="grid grid-cols-1 gap-4 mb-4 shrink-0">
|
||||
<div className="space-y-1">
|
||||
<label className="text-xs font-semibold uppercase text-muted-foreground">Chương số</label>
|
||||
<Input type="number" value={number} onChange={(e) => setNumber(e.target.value)} className="font-mono" />
|
||||
</div>
|
||||
<div className="space-y-1">
|
||||
<label className="text-xs font-semibold uppercase text-muted-foreground">Quyển số</label>
|
||||
<Input type="number" value={volumeNumber} onChange={(e) => setVolumeNumber(e.target.value)} className="font-mono" placeholder="VD: 1" />
|
||||
</div>
|
||||
<div className="space-y-1">
|
||||
<label className="text-xs font-semibold uppercase text-muted-foreground">Chương trong quyển</label>
|
||||
<Input type="number" value={volumeChapterNumber} onChange={(e) => setVolumeChapterNumber(e.target.value)} className="font-mono" placeholder="VD: 3" />
|
||||
</div>
|
||||
<div className="space-y-1 md:col-span-3">
|
||||
<label className="text-xs font-semibold uppercase text-muted-foreground">Tên quyển</label>
|
||||
<Input value={volumeTitle} onChange={(e) => setVolumeTitle(e.target.value)} placeholder="VD: Quyển 1 - Khởi đầu" />
|
||||
</div>
|
||||
</div>
|
||||
<div className="grid grid-cols-1 gap-4 mb-4 shrink-0">
|
||||
<div className="space-y-1">
|
||||
|
||||
@@ -134,9 +134,6 @@ function ChapterManager() {
|
||||
|
||||
// Form states
|
||||
const [number, setNumber] = useState("")
|
||||
const [volumeNumber, setVolumeNumber] = useState("")
|
||||
const [volumeTitle, setVolumeTitle] = useState("")
|
||||
const [volumeChapterNumber, setVolumeChapterNumber] = useState("")
|
||||
const [title, setTitle] = useState("")
|
||||
const [content, setContent] = useState("")
|
||||
|
||||
@@ -349,9 +346,6 @@ function ChapterManager() {
|
||||
body: JSON.stringify({
|
||||
novelId,
|
||||
number: parseInt(number),
|
||||
volumeNumber: volumeNumber ? parseInt(volumeNumber) : null,
|
||||
volumeTitle: volumeTitle.trim() || null,
|
||||
volumeChapterNumber: volumeChapterNumber ? parseInt(volumeChapterNumber) : null,
|
||||
title,
|
||||
content,
|
||||
}),
|
||||
@@ -364,9 +358,6 @@ function ChapterManager() {
|
||||
setOpenAdd(false)
|
||||
setTitle("")
|
||||
setContent("")
|
||||
setVolumeNumber("")
|
||||
setVolumeTitle("")
|
||||
setVolumeChapterNumber("")
|
||||
setNumber((parseInt(number) + 1).toString())
|
||||
fetchChapters()
|
||||
} catch (error: any) {
|
||||
@@ -790,24 +781,6 @@ function ChapterManager() {
|
||||
<Input value={title} onChange={(e) => setTitle(e.target.value)} placeholder="Ví dụ: Thiếu niên kỳ bạt" required autoFocus />
|
||||
</div>
|
||||
</div>
|
||||
<details className="group border rounded-lg [&_summary::-webkit-details-marker]:hidden">
|
||||
<summary className="flex cursor-pointer items-center justify-between px-4 py-2 bg-muted/30 font-medium">
|
||||
<span className="text-sm">Tùy chọn nâng cao (Quyển / Tập)</span>
|
||||
<span className="transition duration-300 group-open:-rotate-180">
|
||||
<svg fill="none" height="18" shape-rendering="geometricPrecision" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="1.5" viewBox="0 0 24 24" width="18"><path d="M6 9l6 6 6-6"></path></svg>
|
||||
</span>
|
||||
</summary>
|
||||
<div className="grid grid-cols-6 gap-4 p-4 text-muted-foreground bg-card">
|
||||
<div className="space-y-2 col-span-2">
|
||||
<label className="text-xs font-medium">Quyển số</label>
|
||||
<Input type="number" value={volumeNumber} onChange={(e) => setVolumeNumber(e.target.value)} placeholder="VD: 1" />
|
||||
</div>
|
||||
<div className="space-y-2 col-span-4">
|
||||
<label className="text-xs font-medium">Tên quyển</label>
|
||||
<Input value={volumeTitle} onChange={(e) => setVolumeTitle(e.target.value)} placeholder="VD: Khởi đầu mới" />
|
||||
</div>
|
||||
</div>
|
||||
</details>
|
||||
<div className="space-y-2 flex-1 flex flex-col h-full">
|
||||
<label className="text-sm font-medium">Nội dung văn bản (Hỗ trợ xuống dòng)</label>
|
||||
<Textarea
|
||||
|
||||
Reference in New Issue
Block a user