Refactor ScribeChapterComponent and offline handlers for seamless local and server operations
- Add stricter typings (`RefObject`) and improve type safety. - Introduce conditional logic for `localBook` to
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import {ChapterListProps, ChapterProps} from "@/lib/models/Chapter";
|
||||
import {useContext, useEffect, useRef, useState} from "react";
|
||||
import {RefObject, useContext, useEffect, useRef, useState} from "react";
|
||||
import System from "@/lib/models/System";
|
||||
import {BookContext} from "@/context/BookContext";
|
||||
import {AlertContext} from "@/context/AlertContext";
|
||||
@@ -32,8 +32,8 @@ export default function ScribeChapterComponent() {
|
||||
const [deleteConfirmationMessage, setDeleteConfirmationMessage] = useState<boolean>(false);
|
||||
const [removeChapterId, setRemoveChapterId] = useState<string>('');
|
||||
|
||||
const chapterRefs = useRef<Map<string, HTMLDivElement>>(new Map());
|
||||
const scrollContainerRef = useRef<HTMLUListElement>(null);
|
||||
const chapterRefs: RefObject<Map<string, HTMLDivElement>> = useRef<Map<string, HTMLDivElement>>(new Map());
|
||||
const scrollContainerRef: RefObject<HTMLUListElement | null> = useRef<HTMLUListElement>(null);
|
||||
|
||||
useEffect((): void => {
|
||||
if (book)
|
||||
@@ -46,9 +46,9 @@ export default function ScribeChapterComponent() {
|
||||
|
||||
useEffect((): void => {
|
||||
if (chapter?.chapterId && scrollContainerRef.current) {
|
||||
setTimeout(() => {
|
||||
const element = chapterRefs.current.get(chapter.chapterId);
|
||||
const container = scrollContainerRef.current;
|
||||
setTimeout(():void => {
|
||||
const element: HTMLDivElement | undefined = chapterRefs.current.get(chapter.chapterId);
|
||||
const container: HTMLUListElement | null = scrollContainerRef.current;
|
||||
|
||||
if (element && container) {
|
||||
const containerRect:DOMRect = container.getBoundingClientRect();
|
||||
@@ -77,7 +77,11 @@ export default function ScribeChapterComponent() {
|
||||
if (isCurrentlyOffline()){
|
||||
response = await window.electron.invoke<ChapterListProps[]>('db:book:chapters', book?.bookId)
|
||||
} else {
|
||||
response = await System.authGetQueryToServer<ChapterListProps[]>(`book/chapters?id=${book?.bookId}`, userToken, lang);
|
||||
if (book?.localBook){
|
||||
response = await window.electron.invoke<ChapterListProps[]>('db:book:chapters', book?.bookId)
|
||||
} else {
|
||||
response = await System.authGetQueryToServer<ChapterListProps[]>(`book/chapters?id=${book?.bookId}`, userToken, lang);
|
||||
}
|
||||
}
|
||||
if (response) {
|
||||
setChapters(response);
|
||||
@@ -94,7 +98,7 @@ export default function ScribeChapterComponent() {
|
||||
async function getChapter(chapterId: string): Promise<void> {
|
||||
const version: number = chapter?.chapterContent.version ? chapter?.chapterContent.version : 2;
|
||||
try {
|
||||
let response: ChapterProps | null = null
|
||||
let response: ChapterProps | null
|
||||
if (isCurrentlyOffline()) {
|
||||
response = await window.electron.invoke<ChapterProps>('db:chapter:whole', {
|
||||
bookid: book?.bookId,
|
||||
@@ -102,11 +106,19 @@ export default function ScribeChapterComponent() {
|
||||
version: version,
|
||||
})
|
||||
} else {
|
||||
response = await System.authGetQueryToServer<ChapterProps>(`chapter/whole`, userToken, lang, {
|
||||
bookid: book?.bookId,
|
||||
id: chapterId,
|
||||
version: version,
|
||||
});
|
||||
if (book?.localBook){
|
||||
response = await window.electron.invoke<ChapterProps>('db:chapter:whole', {
|
||||
bookid: book?.bookId,
|
||||
id: chapterId,
|
||||
version: version,
|
||||
})
|
||||
} else {
|
||||
response = await System.authGetQueryToServer<ChapterProps>(`chapter/whole`, userToken, lang, {
|
||||
bookid: book?.bookId,
|
||||
id: chapterId,
|
||||
version: version,
|
||||
});
|
||||
}
|
||||
}
|
||||
if (!response) {
|
||||
errorMessage(t("scribeChapterComponent.errorFetchChapter"));
|
||||
@@ -132,11 +144,19 @@ export default function ScribeChapterComponent() {
|
||||
title: title,
|
||||
})
|
||||
} else {
|
||||
response = await System.authPostToServer<boolean>('chapter/update', {
|
||||
chapterId: chapterId,
|
||||
chapterOrder: chapterOrder,
|
||||
title: title,
|
||||
}, userToken, lang);
|
||||
if (book?.localBook){
|
||||
response = await window.electron.invoke<boolean>('db:chapter:update',{
|
||||
chapterId: chapterId,
|
||||
chapterOrder: chapterOrder,
|
||||
title: title,
|
||||
})
|
||||
} else {
|
||||
response = await System.authPostToServer<boolean>('chapter/update', {
|
||||
chapterId: chapterId,
|
||||
chapterOrder: chapterOrder,
|
||||
title: title,
|
||||
}, userToken, lang);
|
||||
}
|
||||
}
|
||||
if (!response) {
|
||||
errorMessage(t("scribeChapterComponent.errorChapterUpdate"));
|
||||
@@ -173,9 +193,13 @@ export default function ScribeChapterComponent() {
|
||||
if (isCurrentlyOffline()) {
|
||||
response = await window.electron.invoke<boolean>('db:chapter:remove', removeChapterId)
|
||||
} else {
|
||||
response = await System.authDeleteToServer<boolean>('chapter/remove', {
|
||||
chapterId: removeChapterId,
|
||||
}, userToken, lang);
|
||||
if (book?.localBook){
|
||||
response = await window.electron.invoke<boolean>('db:chapter:remove', removeChapterId)
|
||||
} else {
|
||||
response = await System.authDeleteToServer<boolean>('chapter/remove', {
|
||||
chapterId: removeChapterId,
|
||||
}, userToken, lang);
|
||||
}
|
||||
}
|
||||
if (!response) {
|
||||
errorMessage(t("scribeChapterComponent.errorChapterDelete"));
|
||||
@@ -209,11 +233,19 @@ export default function ScribeChapterComponent() {
|
||||
title: chapterTitle
|
||||
})
|
||||
} else {
|
||||
chapterId = await System.authPostToServer<string>('chapter/add', {
|
||||
bookId: book?.bookId,
|
||||
chapterOrder: chapterOrder,
|
||||
title: chapterTitle
|
||||
}, userToken, lang);
|
||||
if (book?.localBook){
|
||||
chapterId = await window.electron.invoke<string>('db:chapter:add', {
|
||||
bookId: book?.bookId,
|
||||
chapterOrder: chapterOrder,
|
||||
title: chapterTitle
|
||||
})
|
||||
} else {
|
||||
chapterId = await System.authPostToServer<string>('chapter/add', {
|
||||
bookId: book?.bookId,
|
||||
chapterOrder: chapterOrder,
|
||||
title: chapterTitle
|
||||
}, userToken, lang);
|
||||
}
|
||||
}
|
||||
if (!chapterId) {
|
||||
errorMessage(t("scribeChapterComponent.errorChapterSubmit", {chapterName: newChapterName}));
|
||||
|
||||
Reference in New Issue
Block a user