import React, { useState, useEffect, useCallback, ReactElement } from "react"; import { useParams } from "react-router-dom"; import Card from "./Card"; import MatchResult from "./MatchResult"; import ComicVineSearchForm from "./ComicVineSearchForm"; import { css } from "@emotion/react"; import PuffLoader from "react-spinners/PuffLoader"; import { isEmpty, isUndefined, isNil } from "lodash"; import { IExtractedComicBookCoverFile, RootState } from "threetwo-ui-typings"; import { fetchComicVineMatches } from "../actions/fileops.actions"; import { getComicBookDetailById } from "../actions/comicinfo.actions"; import { Drawer, Divider } from "antd"; import * as dayjs from "dayjs"; const prettyBytes = require("pretty-bytes"); import "antd/dist/antd.css"; import { useDispatch, useSelector } from "react-redux"; type ComicDetailProps = {}; /** * Component for displaying the metadata for a comic in greater detail. * * @component * @example * return ( * * ) */ export const ComicDetail = ({}: ComicDetailProps): ReactElement => { const [page, setPage] = useState(1); const [visible, setVisible] = useState(false); const comicVineSearchResults = useSelector( (state: RootState) => state.comicInfo.searchResults, ); const comicVineSearchQueryObject = useSelector( (state: RootState) => state.comicInfo.searchQuery, ); const comicVineAPICallProgress = useSelector( (state: RootState) => state.comicInfo.inProgress, ); const comicBookDetailData = useSelector( (state: RootState) => state.comicInfo.comicBookDetail, ); const { comicObjectId } = useParams<{ comicObjectId: string }>(); const dispatch = useDispatch(); useEffect(() => { dispatch(getComicBookDetailById(comicObjectId)); }, [page, dispatch]); const openDrawerWithCVMatches = useCallback(() => { setVisible(true); dispatch(fetchComicVineMatches(comicBookDetailData)); }, [dispatch, comicBookDetailData]); const onClose = () => { setVisible(false); }; return ( {!isEmpty(comicBookDetailData) && !isUndefined(comicBookDetailData) && ( <> {comicBookDetailData.rawFileDetails.name} Raw File Details {comicBookDetailData.rawFileDetails.containedIn} {prettyBytes(comicBookDetailData.rawFileDetails.fileSize)} {comicBookDetailData.rawFileDetails.path} {comicBookDetailData.rawFileDetails.extension} {!isNil(comicBookDetailData.sourcedMetadata.comicvine) && ( ComicVine Metadata Last scraped on{" "} {dayjs(comicBookDetailData.updatedAt).format( "MMM D YYYY [at] h:mm a", )} {comicBookDetailData.sourcedMetadata.comicvine.name} {comicBookDetailData.sourcedMetadata.comicvine.number} Type { comicBookDetailData.sourcedMetadata.comicvine .resource_type } ComicVine Issue ID { comicBookDetailData.sourcedMetadata.comicvine .id } )} Match on Comic Vine {!isEmpty(comicVineSearchQueryObject) && !isUndefined(comicVineSearchQueryObject) ? ( Searching against: Title { comicVineSearchQueryObject.issue.searchParams .searchTerms.name } Number { comicVineSearchQueryObject.issue.searchParams .searchTerms.number } ) : ( )} {!isEmpty(comicVineSearchResults) && ( )} > )} ); };
Searching against: