🏗️ Refactored ComicDetailContainer with useQuery

This commit is contained in:
2023-11-16 11:40:16 -06:00
parent 4d2d7da5b4
commit be67348d20
3 changed files with 46 additions and 21 deletions

View File

@@ -46,6 +46,7 @@ export const ComicDetail = (data: ComicDetailProps): ReactElement => {
rawFileDetails, rawFileDetails,
inferredMetadata, inferredMetadata,
sourcedMetadata: { comicvine, locg, comicInfo }, sourcedMetadata: { comicvine, locg, comicInfo },
acquisition,
}, },
userSettings, userSettings,
} = data; } = data;
@@ -99,7 +100,7 @@ export const ComicDetail = (data: ComicDetailProps): ReactElement => {
CVMatches: { CVMatches: {
content: (props) => ( content: (props) => (
<> <>
<div className="card search-criteria-card"> {/* <div className="card search-criteria-card">
<div className="card-content"> <div className="card-content">
<ComicVineSearchForm data={rawFileDetails} /> <ComicVineSearchForm data={rawFileDetails} />
</div> </div>
@@ -133,7 +134,7 @@ export const ComicDetail = (data: ComicDetailProps): ReactElement => {
/> />
</div> </div>
</div> </div>
)} )} */}
</> </>
), ),
}, },
@@ -192,7 +193,9 @@ export const ComicDetail = (data: ComicDetailProps): ReactElement => {
id: 3, id: 3,
icon: <i className="fa-regular fa-file-archive"></i>, icon: <i className="fa-regular fa-file-archive"></i>,
name: "Archive Operations", name: "Archive Operations",
content: <ArchiveOperations data={data.data} key={3} />, content: <></>,
/*
<ArchiveOperations data={data.data} key={3} /> */
shouldShow: areRawFileDetailsAvailable, shouldShow: areRawFileDetailsAvailable,
}, },
{ {
@@ -284,7 +287,7 @@ export const ComicDetail = (data: ComicDetailProps): ReactElement => {
Read Read
</button> </button>
<Modal {/* <Modal
style={{ content: { marginTop: "2rem" } }} style={{ content: { marginTop: "2rem" } }}
isOpen={modalIsOpen} isOpen={modalIsOpen}
onAfterOpen={afterOpenModal} onAfterOpen={afterOpenModal}
@@ -301,13 +304,16 @@ export const ComicDetail = (data: ComicDetailProps): ReactElement => {
}} }}
/> />
)} )}
</Modal> </Modal> */}
</> </>
)} )}
</div> </div>
</div> </div>
{<TabControls filteredTabs={filteredTabs} />} <TabControls
filteredTabs={filteredTabs}
acquisition={acquisition}
/>
<SlidingPane <SlidingPane
isOpen={visible} isOpen={visible}

View File

@@ -3,17 +3,40 @@ import React, { ReactElement, useContext, useEffect, useState } from "react";
import { useParams } from "react-router-dom"; import { useParams } from "react-router-dom";
import { getComicBookDetailById } from "../../actions/comicinfo.actions"; import { getComicBookDetailById } from "../../actions/comicinfo.actions";
import { ComicDetail } from "../ComicDetail/ComicDetail"; import { ComicDetail } from "../ComicDetail/ComicDetail";
import { useQuery } from "@tanstack/react-query";
import { LIBRARY_SERVICE_BASE_URI } from "../../constants/endpoints";
import axios from "axios";
export const ComicDetailContainer = (): ReactElement | null => { export const ComicDetailContainer = (): ReactElement | null => {
// const comicBookDetailData = useSelector(
// (state: RootState) => state.comicInfo.comicBookDetail,
// );
const { comicObjectId } = useParams<{ comicObjectId: string }>(); const { comicObjectId } = useParams<{ comicObjectId: string }>();
console.log(comicObjectId); const {
data: comicBookDetailData,
isLoading,
isError,
} = useQuery({
queryKey: [],
queryFn: async () =>
await axios({
url: `${LIBRARY_SERVICE_BASE_URI}/getComicBookById`,
method: "POST",
data: {
id: comicObjectId,
},
}),
});
console.log(comicBookDetailData);
useEffect(() => { useEffect(() => {
// dispatch(getComicBookDetailById(comicObjectId)); // dispatch(getComicBookDetailById(comicObjectId));
// dispatch(getSettings()); // dispatch(getSettings());
}, []); }, []);
return <ComicDetail data={comicBookDetailData} />;
{
isError && <>Error</>;
}
{
isLoading && <>Loading...</>;
}
return (
comicBookDetailData?.data && <ComicDetail data={comicBookDetailData.data} />
);
}; };

View File

@@ -5,13 +5,13 @@ export const TabControls = (props): ReactElement => {
// const comicBookDetailData = useSelector( // const comicBookDetailData = useSelector(
// (state: RootState) => state.comicInfo.comicBookDetail, // (state: RootState) => state.comicInfo.comicBookDetail,
// ); // );
const { filteredTabs } = props; const { filteredTabs, acquisition } = props;
const [active, setActive] = useState(filteredTabs[0].id); const [active, setActive] = useState(filteredTabs[0].id);
useEffect(() => { useEffect(() => {
setActive(filteredTabs[0].id); setActive(filteredTabs[0].id);
}, [comicBookDetailData]); }, [acquisition]);
console.log(filteredTabs);
return ( return (
<> <>
<div className="tabs"> <div className="tabs">
@@ -24,15 +24,11 @@ export const TabControls = (props): ReactElement => {
> >
{/* Downloads tab and count badge */} {/* Downloads tab and count badge */}
<a> <a>
{id === 6 && {id === 6 && !isNil(acquisition.directconnect) ? (
!isNil(comicBookDetailData.acquisition.directconnect) ? (
<span className="download-icon-labels"> <span className="download-icon-labels">
<i className="fa-solid fa-download"></i> <i className="fa-solid fa-download"></i>
<span className="tag downloads-count is-info is-light"> <span className="tag downloads-count is-info is-light">
{ {acquisition.directconnect.downloads.length}
comicBookDetailData.acquisition.directconnect.downloads
.length
}
</span> </span>
</span> </span>
) : ( ) : (