diff --git a/src/client/components/ComicDetail.tsx b/src/client/components/ComicDetail.tsx index dfa091a..4e7048f 100644 --- a/src/client/components/ComicDetail.tsx +++ b/src/client/components/ComicDetail.tsx @@ -1,4 +1,10 @@ -import React, { useState, useEffect, ReactElement, useContext } from "react"; +import React, { + useState, + useEffect, + ReactElement, + useContext, + useCallback, +} from "react"; import { useDispatch, useSelector } from "react-redux"; import { useParams } from "react-router-dom"; import Card from "./Carda"; @@ -21,6 +27,8 @@ import "react-sliding-pane/dist/react-sliding-pane.css"; import "react-loader-spinner/dist/loader/css/react-spinner-loader.css"; import Loader from "react-loader-spinner"; import SlidingPane from "react-sliding-pane"; +import Modal from "react-modal"; +import ComicViewer from "react-comic-viewer"; import { escapePoundSymbol } from "../shared/utils/formatting.utils"; @@ -28,6 +36,7 @@ import { LIBRARY_SERVICE_HOST } from "../constants/endpoints"; import { getSettings } from "../actions/settings.actions"; import { AirDCPPSocketContext } from "../context/AirDCPPSocket"; import AirDCPPSocket from "../services/DcppSearchService"; +import { extractComicArchive } from "../actions/fileops.actions"; type ComicDetailProps = {}; /** @@ -45,6 +54,7 @@ export const ComicDetail = ({}: ComicDetailProps): ReactElement => { const [active, setActive] = useState(1); const [visible, setVisible] = useState(false); const [slidingPanelContentId, setSlidingPanelContentId] = useState(""); + const [modalIsOpen, setIsOpen] = useState(false); const comicVineSearchResults = useSelector( (state: RootState) => state.comicInfo.searchResults, @@ -58,11 +68,28 @@ export const ComicDetail = ({}: ComicDetailProps): ReactElement => { const comicBookDetailData = useSelector( (state: RootState) => state.comicInfo.comicBookDetail, ); + const extractedComicBook = useSelector( + (state: RootState) => state.fileOps.extractedComicBookArchive, + ); const { comicObjectId } = useParams<{ comicObjectId: string }>(); const userSettings = useSelector((state: RootState) => state.settings.data); const { ADCPPSocket, setADCPPSocket } = useContext(AirDCPPSocketContext); const dispatch = useDispatch(); + const openModal = useCallback((filePath) => { + setIsOpen(true); + dispatch(extractComicArchive(filePath)); + }, []); + + const afterOpenModal = useCallback(() => { + // references are now sync'd and can be accessed. + // subtitle.style.color = "#f00"; + }, []); + + const closeModal = useCallback(() => { + setIsOpen(false); + }, []); + useEffect(() => { dispatch(getComicBookDetailById(comicObjectId)); dispatch(getSettings()); @@ -311,6 +338,32 @@ export const ComicDetail = ({}: ComicDetailProps): ReactElement => { comicBookDetailData.inferredMetadata, }} /> + {/* Read comic button */} + + + + + {extractedComicBook && ( + + )} + )} diff --git a/src/client/components/ComicDetail/Tabs/ArchiveOperations.tsx b/src/client/components/ComicDetail/Tabs/ArchiveOperations.tsx index 4c655d1..3610ae8 100644 --- a/src/client/components/ComicDetail/Tabs/ArchiveOperations.tsx +++ b/src/client/components/ComicDetail/Tabs/ArchiveOperations.tsx @@ -7,8 +7,6 @@ import SlidingPane from "react-sliding-pane"; import { extractComicArchive } from "../../../actions/fileops.actions"; import { analyzeImage } from "../../../actions/fileops.actions"; import { Canvas } from "../../shared/Canvas"; -import ComicViewer from "react-comic-viewer"; -import Modal from "react-modal"; export const ArchiveOperations = (props): ReactElement => { const { data } = props;