📝 Refactoring

This commit is contained in:
2021-08-04 15:46:41 -07:00
parent 0de430f826
commit 05fb0fad2b
7 changed files with 60 additions and 27 deletions

View File

@@ -55,7 +55,7 @@
"react-window-dynamic-list": "^2.3.5", "react-window-dynamic-list": "^2.3.5",
"sharp": "^0.28.1", "sharp": "^0.28.1",
"socket.io-client": "^4.1.2", "socket.io-client": "^4.1.2",
"threetwo-ui-typings": "^1.0.1", "threetwo-ui-typings": "^1.0.2",
"voca": "^1.4.0", "voca": "^1.4.0",
"websocket": "^1.0.34", "websocket": "^1.0.34",
"ws": "^7.5.3", "ws": "^7.5.3",

View File

@@ -71,7 +71,7 @@ export const fetchComicBookMetadata = (options) => async (dispatch) => {
socket.on("disconnect", () => { socket.on("disconnect", () => {
console.log(`disconnect`); console.log(`disconnect`);
}); });
socket.emit("importComicsInDB", { socket.emit("importComicsToDB", {
action: "getComicCovers", action: "getComicCovers",
params: { params: {
extractionOptions, extractionOptions,
@@ -80,6 +80,7 @@ export const fetchComicBookMetadata = (options) => async (dispatch) => {
}); });
socket.on("comicBookCoverMetadata", (data: IExtractedComicBookCoverFile) => { socket.on("comicBookCoverMetadata", (data: IExtractedComicBookCoverFile) => {
console.log("Recd cover");
dispatch({ dispatch({
type: IMS_COMICBOOK_METADATA_FETCHED, type: IMS_COMICBOOK_METADATA_FETCHED,
data, data,
@@ -88,11 +89,11 @@ export const fetchComicBookMetadata = (options) => async (dispatch) => {
}); });
}; };
export const getRecentlyImportedComicBooks = (options) => async (dispatch) => { export const getComicBooks = (options) => async (dispatch) => {
const { paginationOptions } = options; const { paginationOptions } = options;
return axios return axios
.request({ .request({
url: "http://localhost:3000/api/import/getRecentlyImportedComicBooks", url: "http://localhost:3000/api/import/getComicBooks",
method: "POST", method: "POST",
data: { data: {
paginationOptions, paginationOptions,

View File

@@ -59,7 +59,6 @@ $border-color: red;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
column-gap: 0.5em; column-gap: 0.5em;
row-gap: 1.2em; row-gap: 1.2em;
min-height: 30px;
.card { .card {
max-width: 500px; max-width: 500px;
@@ -76,12 +75,11 @@ $border-color: red;
align-self: center; align-self: center;
.image { .image {
max-width: 60px; max-width: 60px;
border-top-right-radius: 0; border-top-right-radius: 0;
border-bottom-right-radius: 0; border-bottom-right-radius: 0;
border-top-left-radius: 0.25em; border-top-left-radius: 0.25em;
border-bottom-left-radius: 0.25em; border-bottom-left-radius: 0.25em;
} }
} }
.card-content { .card-content {
align-self: center; align-self: center;
@@ -111,6 +109,23 @@ $border-color: red;
} }
} }
// Library
.library {
table {
td {
border: 0 none;
.card {
.name {
margin: 0 0 4px 0;
}
}
}
tbody {
padding: 10px 0 0 0;
}
}
}
.comic-vine-match-drawer { .comic-vine-match-drawer {
// comic detail drawer // comic detail drawer
.search-criteria-card { .search-criteria-card {

View File

@@ -2,7 +2,7 @@ import * as React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import ZeroState from "./ZeroState"; import ZeroState from "./ZeroState";
import { RecentlyImported } from "./RecentlyImported"; import { RecentlyImported } from "./RecentlyImported";
import { getRecentlyImportedComicBooks } from "../actions/fileops.actions"; import { getComicBooks } from "../actions/fileops.actions";
import { isEmpty } from "lodash"; import { isEmpty } from "lodash";
interface IProps { interface IProps {
@@ -52,7 +52,7 @@ function mapStateToProps(state: IState) {
const mapDispatchToProps = (dispatch) => ({ const mapDispatchToProps = (dispatch) => ({
getRecentComics() { getRecentComics() {
dispatch( dispatch(
getRecentlyImportedComicBooks({ getComicBooks({
paginationOptions: { paginationOptions: {
page: 0, page: 0,
limit: 5, limit: 5,

View File

@@ -11,6 +11,7 @@ import {
} from "../shared/utils/formatting.utils"; } from "../shared/utils/formatting.utils";
import { useTable } from "react-table"; import { useTable } from "react-table";
import prettyBytes from "pretty-bytes"; import prettyBytes from "pretty-bytes";
import ellipsize from "ellipsize";
import { useDispatch, useSelector } from "react-redux"; import { useDispatch, useSelector } from "react-redux";
@@ -47,9 +48,19 @@ export const Library = ({}: IComicBookLibraryProps): ReactElement => {
</figure> </figure>
</div> </div>
<ul className="card-content"> <ul className="card-content">
<li>{props.cell.value.name}</li> <li className="name has-text-weight-medium">{ellipsize(props.cell.value.name, 18)}</li>
<li>{props.cell.value.containedIn}</li> <li>
<li>{prettyBytes(props.cell.value.fileSize)}</li> <div className="control">
<div className="tags has-addons">
<span className="tag is-primary is-light">
{props.cell.value.extension}
</span>
<span className="tag is-info is-light">
{prettyBytes(props.cell.value.fileSize)}
</span>
</div>
</div>
</li>
</ul> </ul>
</div> </div>
</div> </div>
@@ -60,7 +71,12 @@ export const Library = ({}: IComicBookLibraryProps): ReactElement => {
{ {
Header: "Import Status", Header: "Import Status",
accessor: "importStatus.isImported", accessor: "importStatus.isImported",
Cell: (props) => `${props.cell.value.toString()}`, Cell: (props) =>
`${props.cell.value.toString()}` ? (
<span className="tag is-info is-light">Imported</span>
) : (
"Not Imported"
),
}, },
], ],
}, },
@@ -77,8 +93,11 @@ export const Library = ({}: IComicBookLibraryProps): ReactElement => {
<div className="section"> <div className="section">
<h1 className="title">Library</h1> <h1 className="title">Library</h1>
<div className="columns"> <div className="columns">
<div className="column"> <div className="column library">
<table {...getTableProps()}> <table
{...getTableProps()}
className="table is-narrow is-hoverable"
>
<thead> <thead>
{headerGroups.map((headerGroup, idx) => ( {headerGroups.map((headerGroup, idx) => (
<tr key={idx} {...headerGroup.getHeaderGroupProps()}> <tr key={idx} {...headerGroup.getHeaderGroupProps()}>

View File

@@ -48,14 +48,12 @@ export const preprocess = (inputString: string) => {
// see if the comic matches the following format, and if so, remove everything // see if the comic matches the following format, and if so, remove everything
// after the first number: // after the first number:
// "nnn series name #xx (etc) (etc)" -> "series name #xx (etc) (etc)" // "nnn series name #xx (etc) (etc)" -> "series name #xx (etc) (etc)"
const format1 = "124 series name #xx (etc) (etc)".match( const format1 = inputString.match(/^\s*(\d+)[\s._-]+?([^#]+)(\W+.*)/);
/^\s*(\d+)[\s._-]+?([^#]+)(\W+.*)/,
);
// see if the comic matches the following format, and if so, remove everything // see if the comic matches the following format, and if so, remove everything
// after the first number that isn't in brackets: // after the first number that isn't in brackets:
// "series name #xxx - title (etc) (etc)" -> "series name #xxx (etc) (etc) // "series name #xxx - title (etc) (etc)" -> "series name #xxx (etc) (etc)
const format2 = "".match( const format2 = inputString.match(
/^((?:[a-zA-Z,.-]+\s)+)(\#?(?:\d+[.0-9*])\s*(?:-))(.*((\(.*)?))$/gis, /^((?:[a-zA-Z,.-]+\s)+)(\#?(?:\d+[.0-9*])\s*(?:-))(.*((\(.*)?))$/gis,
); );
}; };
@@ -94,7 +92,7 @@ export const tokenize = (inputString: string) => {
const hyphenatedIssueRange = inputString.match(/(\d)(-\d+)/gi); const hyphenatedIssueRange = inputString.match(/(\d)(-\d+)/gi);
if (!isNull(hyphenatedIssueRange) && hyphenatedIssueRange.length > 2) { if (!isNull(hyphenatedIssueRange) && hyphenatedIssueRange.length > 2) {
let issueNumber = hyphenatedIssueRange[0]; const issueNumber = hyphenatedIssueRange[0];
} }
const readingListIndicators = inputString.match( const readingListIndicators = inputString.match(

View File

@@ -13154,10 +13154,10 @@ text-table@^0.2.0, text-table@~0.2.0:
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
threetwo-ui-typings@^1.0.1: threetwo-ui-typings@^1.0.2:
version "1.0.1" version "1.0.2"
resolved "https://registry.yarnpkg.com/threetwo-ui-typings/-/threetwo-ui-typings-1.0.1.tgz#5e1c4aca9342e1655ef471fe2e50752bb844b788" resolved "https://registry.yarnpkg.com/threetwo-ui-typings/-/threetwo-ui-typings-1.0.2.tgz#63cf3739c340d8595cb36baa8669d4d836aa2290"
integrity sha512-g5FWa069AT1WfUHHEVFOQ1q6cfK+9UOzewfKblheuDBSsGN/e89MJMEVfuInBaHgxHM32/P+mNUFBqnBoeRSLQ== integrity sha512-sK5cb/fApFKseQNgcnGmAnPNxDDXT+dQ/Blei1N4q0mduO3kZfJTnlMYaXjO4FDXLP+jkiwsv0bf7PXm0DgF7g==
dependencies: dependencies:
typescript "^4.3.2" typescript "^4.3.2"