Refactor DeleteBook component to update synchronization states and remove unused session updates
This commit is contained in:
@@ -9,18 +9,21 @@ import {AlertContext, AlertContextProps} from "@/context/AlertContext";
|
||||
import AlertBox from "@/components/AlertBox";
|
||||
import OfflineContext, {OfflineContextType} from "@/context/OfflineContext";
|
||||
import {BookContext} from "@/context/BookContext";
|
||||
import {BooksSyncContext, BooksSyncContextProps} from "@/context/BooksSyncContext";
|
||||
import {SyncedBook} from "@/lib/models/SyncedBook";
|
||||
|
||||
interface DeleteBookProps {
|
||||
bookId: string;
|
||||
}
|
||||
|
||||
export default function DeleteBook({bookId}: DeleteBookProps) {
|
||||
const {session, setSession} = useContext(SessionContext);
|
||||
const {session} = useContext(SessionContext);
|
||||
const {lang} = useContext<LangContextProps>(LangContext)
|
||||
const {isCurrentlyOffline} = useContext<OfflineContextType>(OfflineContext);
|
||||
const {book} = useContext(BookContext);
|
||||
const [showConfirmBox, setShowConfirmBox] = useState<boolean>(false);
|
||||
const {errorMessage} = useContext<AlertContextProps>(AlertContext)
|
||||
const {serverOnlyBooks,setServerOnlyBooks,localOnlyBooks,setLocalOnlyBooks} = useContext<BooksSyncContextProps>(BooksSyncContext);
|
||||
|
||||
function handleConfirmation(): void {
|
||||
setShowConfirmBox(true);
|
||||
@@ -34,7 +37,8 @@ export default function DeleteBook({bookId}: DeleteBookProps) {
|
||||
id: bookId,
|
||||
});
|
||||
} else {
|
||||
if (book?.localBook) {
|
||||
const ifLocalBook:SyncedBook|undefined = localOnlyBooks.find((book: SyncedBook):boolean => book.id === bookId);
|
||||
if (ifLocalBook) {
|
||||
response = await window.electron.invoke<boolean>('db:book:delete', {
|
||||
id: bookId,
|
||||
});
|
||||
@@ -51,33 +55,12 @@ export default function DeleteBook({bookId}: DeleteBookProps) {
|
||||
}
|
||||
if (response) {
|
||||
setShowConfirmBox(false);
|
||||
const updatedBooks: BookProps[] = (session.user?.books || []).reduce((acc: BookProps[], book: BookProps): BookProps[] => {
|
||||
if (book.bookId !== bookId) {
|
||||
acc.push({...book});
|
||||
}
|
||||
return acc;
|
||||
}, []);
|
||||
if (!response) {
|
||||
errorMessage("Une erreur est survenue lors de la suppression du livre.");
|
||||
if (book?.localBook){
|
||||
setLocalOnlyBooks(localOnlyBooks.filter((book:SyncedBook):boolean => book.id !== bookId));
|
||||
return;
|
||||
}
|
||||
const updatedUser = {
|
||||
...(JSON.parse(JSON.stringify(session.user))),
|
||||
books: updatedBooks
|
||||
};
|
||||
|
||||
const newSession = {
|
||||
...JSON.parse(JSON.stringify(session)),
|
||||
user: updatedUser,
|
||||
isConnected: true,
|
||||
accessToken: session.accessToken
|
||||
};
|
||||
|
||||
setSession(newSession);
|
||||
|
||||
setTimeout((): void => {
|
||||
setSession({...newSession});
|
||||
}, 0);
|
||||
setServerOnlyBooks(serverOnlyBooks.filter((book:SyncedBook):boolean => book.id !== bookId));
|
||||
setShowConfirmBox(false);
|
||||
}
|
||||
} catch (e: unknown) {
|
||||
if (e instanceof Error) {
|
||||
|
||||
Reference in New Issue
Block a user