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;