💄 Beautified metadata tabs

This commit is contained in:
2021-08-20 09:17:27 -07:00
parent 7aa3db125b
commit f6650fc18d
2 changed files with 77 additions and 14 deletions

View File

@@ -35,6 +35,7 @@ type ComicDetailProps = {};
export const ComicDetail = ({}: ComicDetailProps): ReactElement => {
const [page, setPage] = useState(1);
const [visible, setVisible] = useState(false);
const [isActionDropdownCollapsed, collapseActionDropdown] = useState(false);
const comicVineSearchResults = useSelector(
(state: RootState) => state.comicInfo.searchResults,
@@ -50,6 +51,8 @@ export const ComicDetail = ({}: ComicDetailProps): ReactElement => {
);
const { comicObjectId } = useParams<{ comicObjectId: string }>();
const dispatch = useDispatch();
const toggleActionDropdown = () =>
collapseActionDropdown(!isActionDropdownCollapsed);
useEffect(() => {
dispatch(getComicBookDetailById(comicObjectId));
@@ -77,6 +80,7 @@ export const ComicDetail = ({}: ComicDetailProps): ReactElement => {
{
id: 1,
name: "Volume Information",
icon: <i className="fas fa-layer-group"></i>,
content: isComicBookMetadataAvailable ? (
<>
<div className="columns">
@@ -135,6 +139,7 @@ export const ComicDetail = ({}: ComicDetailProps): ReactElement => {
},
{
id: 2,
icon: <i className="fas fa-puzzle-piece"></i>,
name: "Other Metadata",
content: <div>bastard</div>,
},
@@ -144,13 +149,16 @@ export const ComicDetail = ({}: ComicDetailProps): ReactElement => {
<>
<div className="tabs">
<ul>
{tabGroup.map(({ id, name }) => (
{tabGroup.map(({ id, name, icon }) => (
<li
key={id}
className={id === active ? "is-active" : ""}
onClick={() => setActive(id)}
>
<a>{name}</a>
<a>
<span className="icon is-small">{icon}</span>
{name}
</a>
</li>
))}
</ul>
@@ -212,13 +220,13 @@ export const ComicDetail = ({}: ComicDetailProps): ReactElement => {
let imagePath = "";
let comicBookTitle = "";
if (!isNil(comicBookDetailData.rawFilDetails)) {
if (!isNil(comicBookDetailData.rawFileDetails)) {
const encodedFilePath = encodeURI(
"http://localhost:3000" +
removeLeadingPeriod(comicBookDetailData.rawFilDetails.path),
removeLeadingPeriod(comicBookDetailData.rawFileDetails.path),
);
imagePath = escapePoundSymbol(encodedFilePath);
comicBookTitle = comicBookDetailData.rawFilDetails.name;
comicBookTitle = comicBookDetailData.rawFileDetails.name;
} else if (
!isNil(comicBookDetailData.sourcedMetadata) &&
!isNil(comicBookDetailData.sourcedMetadata.comicvine)
@@ -240,6 +248,7 @@ export const ComicDetail = ({}: ComicDetailProps): ReactElement => {
hasDetails={false}
/>
</div>
{/* raw file details */}
<div className="column">
{!isNil(comicBookDetailData.rawFileDetails) && (
<>
@@ -247,21 +256,68 @@ export const ComicDetail = ({}: ComicDetailProps): ReactElement => {
<Divider />
</>
)}
{/* comic vine scraped metadata */}
{!isNil(comicBookDetailData.sourcedMetadata.comicvine) && (
<ComicVineDetails
data={comicBookDetailData.sourcedMetadata.comicvine}
updatedAt={comicBookDetailData.updatedAt}
/>
)}
<button
className="button is-small"
onClick={openDrawerWithCVMatches}
{/* action dropdown */}
<div
className={
"dropdown " + (isActionDropdownCollapsed ? "is-active" : "")
}
onBlur={() => toggleActionDropdown()}
>
<span className="icon">
<i className="fas fa-magic"></i>
</span>
<span>Match on Comic Vine</span>
</button>
<div className="dropdown-trigger">
<button
className="button is-small"
aria-haspopup="true"
aria-controls="dropdown-menu2"
onClick={() => toggleActionDropdown()}
>
<span>
<i className="fas fa-sliders-h"></i> Actions
</span>
<span className="icon is-small">
<i className="fas fa-angle-down" aria-hidden="true"></i>
</span>
</button>
</div>
<div
className="dropdown-menu"
id="dropdown-menu2"
role="menu"
>
<div className="dropdown-content">
<div
className="dropdown-item"
onClick={openDrawerWithCVMatches}
>
<span className="icon">
<i className="fas fa-magic"></i>
</span>
<span>Match on ComicVine</span>
</div>
<hr className="dropdown-divider" />
<div className="dropdown-item">
<span className="icon">
<i className="fas fa-edit"></i>
</span>
<span>Edit Metdata</span>
</div>
<hr className="dropdown-divider" />
<div className="dropdown-item">
<span className="icon">
<i className="fas fa-trash"></i>
</span>
<span>Delete Comic</span>
</div>
</div>
</div>
</div>
</div>
</div>

View File

@@ -257,7 +257,6 @@ export const Library = ({}: IComicBookLibraryProps): ReactElement => {
}),
);
}, [pageIndex, pageSize]);
const comicBookLibraryItems = React.useMemo(() => {});
return (
<section className="container">
@@ -307,15 +306,19 @@ export const Library = ({}: IComicBookLibraryProps): ReactElement => {
</tbody>
</table>
{/* pagination controls */}
<nav
className="pagination"
role="navigation"
aria-label="pagination"
>
{/* x of total indicator */}
<div>
Page {pageIndex} of {Math.ceil(pageTotal / pageSize)}
(Total resources: {pageTotal})
</div>
{/* previous page and next page controls */}
<div className="field has-addons">
<p className="control">
<button
@@ -337,6 +340,7 @@ export const Library = ({}: IComicBookLibraryProps): ReactElement => {
</p>
</div>
{/* first and last page controls */}
<div className="field has-addons">
<p className="control">
<button
@@ -357,6 +361,8 @@ export const Library = ({}: IComicBookLibraryProps): ReactElement => {
</button>
</p>
</div>
{/* page selector */}
<span>
Go to page:
<input
@@ -371,6 +377,7 @@ export const Library = ({}: IComicBookLibraryProps): ReactElement => {
/>
</span>
{/* page size selector */}
<div
className={
"dropdown " + (isPageSizeDropdownCollapsed ? "is-active" : "")