import { isEmpty, isUndefined, map, partialRight, pick } from "lodash"; import React, { useEffect, ReactElement, useState, useCallback } from "react"; import { useDispatch, useSelector } from "react-redux"; import { useParams } from "react-router"; import { getComicBookDetailById, getIssuesForSeries, analyzeLibrary, } from "../../actions/comicinfo.actions"; import PotentialLibraryMatches from "./PotentialLibraryMatches"; import Masonry from "react-masonry-css"; import { Card } from "../shared/Carda"; import SlidingPane from "react-sliding-pane"; import { convert } from "html-to-text"; import ellipsize from "ellipsize"; const VolumeDetails = (props): ReactElement => { const breakpointColumnsObj = { default: 6, 1100: 4, 700: 3, 500: 2, }; // sliding panel config const [visible, setVisible] = useState(false); const [slidingPanelContentId, setSlidingPanelContentId] = useState(""); const [matches, setMatches] = useState([]); const [active, setActive] = useState(1); // sliding panel init const contentForSlidingPanel = { potentialMatchesInLibrary: { content: () => { const ids = map(matches, partialRight(pick, "_id")); const matchIds = ids.map((id: any) => id._id); return ; }, }, }; // sliding panel handlers const openPotentialLibraryMatchesPanel = useCallback((potentialMatches) => { setSlidingPanelContentId("potentialMatchesInLibrary"); setMatches(potentialMatches); setVisible(true); }, []); const analyzeIssues = useCallback((issues) => { dispatch(analyzeLibrary(issues)); }, []); const comicBookDetails = useSelector( (state: RootState) => state.comicInfo.comicBookDetail, ); const issuesForVolume = useSelector( (state: RootState) => state.comicInfo.issuesForVolume, ); const dispatch = useDispatch(); useEffect(() => { dispatch(getIssuesForSeries(comicObjectId)); dispatch(getComicBookDetailById(comicObjectId)); }, []); const { comicObjectId } = useParams<{ comicObjectId: string }>(); const IssuesInVolume = () => ( <> {!isUndefined(issuesForVolume) ? (
analyzeIssues(issuesForVolume)}> Analyze Library
) : null} {!isUndefined(issuesForVolume) && !isEmpty(issuesForVolume) ? issuesForVolume.map((issue) => { return ( openPotentialLibraryMatchesPanel(issue.matches) } > {issue.issue_number} {!isEmpty(issue.matches) ? ( <> ) : null} ); }) : "loading"} ); // Tab content and header details const tabGroup = [ { id: 1, name: "Issues in Volume", icon: , content: , }, { id: 2, icon: , name: "Characters", content:
asdasd
, }, { id: 3, icon: , name: "Arcs", content:
asdasd
, }, ]; // Tabs const MetadataTabGroup = () => { return ( <>
    {tabGroup.map(({ id, name, icon }) => (
  • setActive(id)} > {icon} {name}
  • ))}
{tabGroup.map(({ id, content }) => { return active === id ? content : null; })} ); }; if ( !isUndefined(comicBookDetails.sourcedMetadata) && !isUndefined(comicBookDetails.sourcedMetadata.comicvine.volumeInformation) ) { return (
{/* Title */}

{comicBookDetails.sourcedMetadata.comicvine.volumeInformation.name}

{/* Volume cover */}
{/* Comicvine Id */}
ComicVine Id { comicBookDetails.sourcedMetadata.comicvine .volumeInformation.id }
{/* Publisher */}
Publisher { comicBookDetails.sourcedMetadata.comicvine .volumeInformation.publisher.name }
{/* Deck */}
{!isEmpty( comicBookDetails.sourcedMetadata.comicvine.volumeInformation .description, ) ? ellipsize( convert( comicBookDetails.sourcedMetadata.comicvine .volumeInformation.description, { baseElements: { selectors: ["p"], }, }, ), 300, ) : null}
{/*
{JSON.stringify(issuesForVolume, undefined, 2)}
*/}
setVisible(false)} title={"Potential Matches in Library"} width={"600px"} > {slidingPanelContentId !== "" && contentForSlidingPanel[slidingPanelContentId].content()}
); } else { return <>; } }; export default VolumeDetails;