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 }
)}
{!isEmpty(comicVineSearchQueryObject) && !isUndefined(comicVineSearchQueryObject) ? (

Searching against:

Title { comicVineSearchQueryObject.issue.searchParams .searchTerms.name }
Number { comicVineSearchQueryObject.issue.searchParams .searchTerms.number }
) : (
)}
{!isEmpty(comicVineSearchResults) && ( )}
)}
); };