- {!isEmpty(
- detectTradePaperbacks(
+ {!isUndefined(
+ detectIssueTypes(
comicBookDetailData.sourcedMetadata.comicvine.volumeInformation
.description,
),
@@ -407,7 +407,14 @@ export const ComicDetail = ({}: ComicDetailProps): ReactElement => {
Detected Type
- Trade Paperback
+
+ {
+ detectIssueTypes(
+ comicBookDetailData.sourcedMetadata.comicvine
+ .volumeInformation.description,
+ ).displayName
+ }
+
) : (
diff --git a/src/client/components/LibraryGrid.tsx b/src/client/components/LibraryGrid.tsx
index 7d3b3b5..c832b87 100644
--- a/src/client/components/LibraryGrid.tsx
+++ b/src/client/components/LibraryGrid.tsx
@@ -13,7 +13,7 @@ import { getComicBooks } from "../actions/fileops.actions";
import { isNil, isEmpty } from "lodash";
import Masonry from "react-masonry-css";
import Card from "./Carda";
-import { detectTradePaperbacks } from "../shared/utils/tradepaperback.utils";
+import { detectIssueTypes } from "../shared/utils/tradepaperback.utils";
import { Link } from "react-router-dom";
interface ILibraryGridProps {}
@@ -81,7 +81,7 @@ export const LibraryGrid = (libraryGridProps: ILibraryGridProps) => {
)}
{!isNil(sourcedMetadata.comicvine) &&
!isEmpty(
- detectTradePaperbacks(
+ detectIssueTypes(
sourcedMetadata.comicvine.volumeInformation.description,
),
) ? (
diff --git a/src/client/components/RecentlyImported.tsx b/src/client/components/RecentlyImported.tsx
index 2d3929c..e69dc0f 100644
--- a/src/client/components/RecentlyImported.tsx
+++ b/src/client/components/RecentlyImported.tsx
@@ -6,8 +6,8 @@ import {
removeLeadingPeriod,
escapePoundSymbol,
} from "../shared/utils/formatting.utils";
-import { isEmpty, isNil, map } from "lodash";
-import { detectTradePaperbacks } from "../shared/utils/tradepaperback.utils";
+import { isNil, isUndefined, map } from "lodash";
+import { detectIssueTypes } from "../shared/utils/tradepaperback.utils";
import Masonry from "react-masonry-css";
type RecentlyImportedProps = {
@@ -71,13 +71,20 @@ export const RecentlyImported = ({
)}
- {!isNil(sourcedMetadata.comicvine) &&
- !isEmpty(
- detectTradePaperbacks(
+ {!isUndefined(sourcedMetadata.comicvine) &&
+ !isNil(
+ detectIssueTypes(
sourcedMetadata.comicvine.volumeInformation.description,
),
) ? (
-
TPB
+
+ {
+ detectIssueTypes(
+ sourcedMetadata.comicvine.volumeInformation
+ .description,
+ ).displayName
+ }
+
) : null}
diff --git a/src/client/shared/utils/tradepaperback.utils.ts b/src/client/shared/utils/tradepaperback.utils.ts
index 0a29f22..d2331a4 100644
--- a/src/client/shared/utils/tradepaperback.utils.ts
+++ b/src/client/shared/utils/tradepaperback.utils.ts
@@ -1,13 +1,29 @@
-import { compact } from "lodash";
+import { flatten, compact, map, isEmpty } from "lodash";
-export const detectTradePaperbacks = (deck): any => {
- const paperback = [
- /((trade)?\s?(paperback)|(tpb))/gim, // https://regex101.com/r/FhuowT/1
- /(hard\s?cover)\s?(collect((ion)|(ed)|(ing)))/gim, //https://regex101.com/r/eFJVRM/1
+export const detectIssueTypes = (deck: string): any => {
+ const issueTypeMatchers = [
+ {
+ regex: [
+ /((trade)?\s?(paperback)|(tpb))/gim, // https://regex101.com/r/FhuowT/1
+ /(hard\s?cover)\s?(collect((ion)|(ed)|(ing)))/gim, //https://regex101.com/r/eFJVRM/1
+ ],
+ displayName: "Trade Paperback",
+ },
+ { regex: [/mini\Wseries/gim], displayName: "Mini-Series" },
];
- const miniSeries = [/mini\Wseries/gim];
- const matches = paperback
+ const matches = map(issueTypeMatchers, (matcher) => {
+ return getIssueTypeDisplayName(deck, matcher.regex, matcher.displayName);
+ });
+ return compact(matches)[0];
+};
+
+const getIssueTypeDisplayName = (
+ deck: string,
+ regexPattern: RegExp[],
+ displayName: string,
+) => {
+ const matches = [...regexPattern]
.map((regex) => {
return deck.match(regex);
})
@@ -16,6 +32,8 @@ export const detectTradePaperbacks = (deck): any => {
return item;
}
});
- // console.log(compact(matches));
- return compact(matches);
+ const results = flatten(compact(matches));
+ if (!isEmpty(results)) {
+ return { displayName, results };
+ }
};