([]);
-
- useEffect(() => {
- setBooks(readBooks());
- }, []);
+ const [books] = useContext(BookListContext);
return (
diff --git a/src/pages/UploadForm/index.tsx b/src/pages/UploadForm/index.tsx
index 38df2f6..7c5f5fc 100644
--- a/src/pages/UploadForm/index.tsx
+++ b/src/pages/UploadForm/index.tsx
@@ -1,16 +1,18 @@
-import React, { useState } from "react";
+import React, { useContext, useState } from "react";
import { useLocation } from "wouter";
import plusIcon from "~/assets/plus.svg";
import styles from "./UploadForm.module.css";
import { submitFile, validateResponse, validState } from "~/api";
-import { saveBook } from "~/utils/localStorage";
+import { BookListContext } from "~/context";
export const UploadForm = () => {
const [error, setError] = useState("");
const [loading, setLoading] = useState(false);
const [_, setLocation] = useLocation();
+ const [__, saveBook] = useContext(BookListContext);
+
const processFile = async (file: File | undefined) => {
try {
if (validState(file)) {
@@ -23,7 +25,7 @@ export const UploadForm = () => {
console.log(validateResponse(res));
if (validateResponse(res)) {
- saveBook(res, res.hash || Date.now().toString());
+ saveBook(res);
setLocation("/");
}
}
diff --git a/src/utils/localStorage.ts b/src/utils/localStorage.ts
index ca0d3c1..d454a84 100644
--- a/src/utils/localStorage.ts
+++ b/src/utils/localStorage.ts
@@ -1,40 +1,33 @@
import { IBook } from "~/types/book";
import { isArrOfStr } from "~/types/utils";
import { validateResponse } from "~/api";
-import { BookItem } from "~/pages/Bookshelf/BookItem";
-const readBookList = (
- cb: (bookList: string[]) => T,
- defaultValue: T extends void ? undefined : T
-) => {
- const bookListStr = localStorage.getItem("list") || "[]";
- const bookList: unknown = JSON.parse(bookListStr);
+export const getTitleList = () => {
+ const titleListStr = localStorage.getItem("list") || "[]";
+ const titleList: unknown = JSON.parse(titleListStr);
- if (isArrOfStr(bookList)) return cb(bookList);
- return defaultValue;
+ if (isArrOfStr(titleList)) return titleList;
+ else {
+ localStorage.setItem("list", "[]");
+ return [];
+ }
};
-export const saveBook = (bookObj: IBook, key: string) =>
- readBookList((bookList) => {
- if (!bookList.includes(key)) {
- const newBookList = [key, ...bookList];
+export const getBookList = (titleList: string[]) =>
+ titleList
+ .map((hash) => JSON.parse(localStorage.getItem(hash) || "{}"))
+ .filter((obj): obj is IBook => {
+ try {
+ return validateResponse(obj);
+ } catch (err) {
+ if (import.meta.env.NODE_ENV === "development")
+ console.log(err.message);
+ return false;
+ }
+ });
- localStorage.setItem("list", JSON.stringify(newBookList));
- localStorage.setItem(key, JSON.stringify(bookObj));
- }
- }, undefined);
+export const setBook = (key: string, book: IBook) =>
+ localStorage.setItem(key, JSON.stringify(book));
-export const readBooks = (): IBook[] =>
- readBookList(
- (bookList) =>
- bookList
- .map((hash) => JSON.parse(localStorage.getItem(hash) || "{}"))
- .filter((e) => {
- try {
- return validateResponse(e);
- } catch (err) {
- return false;
- }
- }),
- []
- );
+export const updateTitleList = (titleList: string[]) =>
+ localStorage.setItem("list", JSON.stringify(titleList));