import React, { useState, useEffect, useMemo, ReactElement, useCallback, } from "react"; import PropTypes from "prop-types"; import { useNavigate } from "react-router-dom"; import T2Table from "../shared/T2Table"; import { isEmpty, isNil, isUndefined } from "lodash"; import RawFileDetails from "./RawFileDetails"; import ComicVineDetails from "./ComicVineDetails"; import SearchBar from "./SearchBar"; import { useDispatch } from "react-redux"; import { searchIssue } from "../../actions/fileops.actions"; import ellipsize from "ellipsize"; interface IComicBookLibraryProps { data: { searchResults: any; }; } export const Library = (data: IComicBookLibraryProps): ReactElement => { const { searchResults } = data.data; console.log(searchResults); // programatically navigate to comic detail const navigate = useNavigate(); const navigateToComicDetail = (row) => { navigate(`/comic/details/${row.original._id}`); }; const ImportStatus = ({ value }) => { return value ? (
Series {ellipsize(value.series[0], 25)}
Pages {value.pagecount[0]}
Issue {!isNil(value.number) && ( {parseInt(value.number[0], 10)} )}
) : ( No ComicInfo.xml ); }; const WantedStatus = ({ value }) => { console.log(value); return !value ? Wanted : null; }; console.log(searchResults); // return null; const columns = useMemo( () => [ { Header: "Comic Metadata", columns: [ { Header: "File Details", id: "fileDetails", minWidth: 450, accessor: (row) => !isEmpty(row._source.rawFileDetails) ? { rawFileDetails: row._source.rawFileDetails, inferredMetadata: row._source.inferredMetadata, } : row._source.sourcedMetadata, Cell: ({ value }) => { // If no CV info available, use raw file metadata if (!isNil(value.rawFileDetails.cover)) { return ; } // If CV metadata available, show it if (!isNil(value.comicvine)) { return ; } return
null
; }, }, { Header: "Import Status", accessor: "_source.sourcedMetadata.comicInfo", minWidth: 300, align: "right", Cell: ImportStatus, }, ], }, { Header: "Additional Metadata", columns: [ { Header: "Publisher", accessor: "_source.sourcedMetadata.comicvine.volumeInformation.publisher", Cell(props) { return ( !isNil(props.cell.value) &&
{props.cell.value.name}
); }, }, { Header: "Something", accessor: "_source.acquisition.wanted", Cell: (props) => { return ; }, }, ], }, ], [], ); ImportStatus.propTypes = { value: PropTypes.bool.isRequired, }; const dispatch = useDispatch(); const goToNextPage = useCallback((pageIndex, pageSize) => { dispatch( searchIssue( { query: {}, }, { pagination: { size: pageSize, from: pageSize * pageIndex + 1, }, }, ), ); }, []); const goToPreviousPage = useCallback((pageIndex, pageSize) => { let from = 0; if (pageIndex === 2) { from = (pageIndex - 1) * pageSize + 2 - 27; } else { from = (pageIndex - 1) * pageSize + 2 - 26; } dispatch( searchIssue( { query: {}, }, { pagination: { size: pageSize, from, }, }, ), ); }, []); return (

Library

{/* Search bar */} {!isUndefined(searchResults) && (
{/* pagination controls */}
)}
); }; export default Library;