Compare commits

..

5 Commits

Author SHA1 Message Date
108260a84a 📗 Upgraded Storybook to v7 rc 2023-03-15 11:38:00 -04:00
79f9b22fad Elasticsearch upgrade fix (#67)
* 🔧 Fixed the response object in reducers and components https://github.com/rishighan/threetwo/issues/64

Signed-off-by: Rishi Ghan <rishi.ghan@gmail.com>

* #️⃣ Added a key prop to MetadataPanel in global search results

Signed-off-by: Rishi Ghan <rishi.ghan@gmail.com>

* 🔧 Fixed DOMNesting issues

Signed-off-by: Rishi Ghan <rishi.ghan@gmail.com>

* 🔧 Fixed the response in wanted reducer action

Signed-off-by: Rishi Ghan <rishi.ghan@gmail.com>

*  Committing the reducer

Signed-off-by: Rishi Ghan <rishi.ghan@gmail.com>

* 🔧 Fixes for DOMNesting issues on the Downloads page

Signed-off-by: Rishi Ghan <rishi.ghan@gmail.com>

---------

Signed-off-by: Rishi Ghan <rishi.ghan@gmail.com>
2023-03-13 11:25:15 -04:00
dependabot[bot]
e291b4806b Bump http-cache-semantics from 4.1.0 to 4.1.1 (#65)
Bumps [http-cache-semantics](https://github.com/kornelski/http-cache-semantics) from 4.1.0 to 4.1.1.
- [Release notes](https://github.com/kornelski/http-cache-semantics/releases)
- [Commits](https://github.com/kornelski/http-cache-semantics/compare/v4.1.0...v4.1.1)

---
updated-dependencies:
- dependency-name: http-cache-semantics
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-03-02 21:47:16 -05:00
ff7b7c9207 Fix for elasticsearch upgrade breakage (#66)
* 🔧 Fixed the response object in reducers and components https://github.com/rishighan/threetwo/issues/64

Signed-off-by: Rishi Ghan <rishi.ghan@gmail.com>

* #️⃣ Added a key prop to MetadataPanel in global search results

Signed-off-by: Rishi Ghan <rishi.ghan@gmail.com>

* 🔧 Fixed DOMNesting issues

Signed-off-by: Rishi Ghan <rishi.ghan@gmail.com>

* 🔧 Fixed the response in wanted reducer action

Signed-off-by: Rishi Ghan <rishi.ghan@gmail.com>

*  Committing the reducer

Signed-off-by: Rishi Ghan <rishi.ghan@gmail.com>

* 🔧 Fixes for DOMNesting issues on the Downloads page

Signed-off-by: Rishi Ghan <rishi.ghan@gmail.com>

---------

Signed-off-by: Rishi Ghan <rishi.ghan@gmail.com>
2023-03-02 00:32:43 -05:00
2d61fa1436 Changing the build system to Vite (#62)
* 🔧 Updated date for PullList on Dashboard

* ️ Added Vite config and removed useless files

* 👷🏽 Updated build command

*  Removed useless deps

* 🔧 Cleaned up package.json and bumped airdcpp-apisocket

* 🔧 Updated some packages and deps

* ⬆️ Bumped some deps

* 🔧 Fixed typo in package.json

* 🔧 Fix for broken paths https://github.com/rishighan/threetwo/issues/63

* 🔧 Fixed broken path and npm script

Signed-off-by: Rishi Ghan <rishi.ghan@gmail.com>

---------

Signed-off-by: Rishi Ghan <rishi.ghan@gmail.com>
2023-03-01 23:31:22 -05:00
17 changed files with 2991 additions and 140 deletions

View File

@@ -1,14 +1,14 @@
module.exports = { module.exports = {
extends: ["plugin:react/recommended", "plugin:@typescript-eslint/recommended", "plugin:prettier/recommended", "plugin:css-modules/recommended", "plugin:storybook/recommended", "plugin:storybook/recommended", "plugin:storybook/recommended"], extends: ["plugin:react/recommended", "plugin:@typescript-eslint/recommended", "plugin:prettier/recommended", "plugin:css-modules/recommended", "plugin:storybook/recommended", "plugin:storybook/recommended", "plugin:storybook/recommended", "plugin:storybook/recommended"],
parser: "@typescript-eslint/parser", parser: "@typescript-eslint/parser",
parserOptions: { parserOptions: {
sourceType: "module", sourceType: "module",
ecmaVersion: 2020, ecmaVersion: 2020,
ecmaFeatures: { ecmaFeatures: {
jsx: true // Allows for the parsing of JSX jsx: true // Allows for the parsing of JSX
} }
}, },
plugins: ["@typescript-eslint", "css-modules"], plugins: ["@typescript-eslint", "css-modules"],
settings: { settings: {
"import/resolver": { "import/resolver": {
@@ -18,9 +18,9 @@ module.exports = {
}, },
react: { react: {
version: "detect" // Tells eslint-plugin-react to automatically detect the version of React to use version: "detect" // Tells eslint-plugin-react to automatically detect the version of React to use
} }
}, },
// Fine tune rules // Fine tune rules
rules: { rules: {
"@typescript-eslint/no-var-requires": 0 "@typescript-eslint/no-var-requires": 0

View File

@@ -1,19 +0,0 @@
module.exports = {
stories: [
"../src/client/stories/*.stories.mdx",
"../src/client/stories/*.stories.@(js|jsx|ts|tsx)",
],
staticDirs: [
"../src/client/stories/assets"
],
addons: [
"@storybook/addon-links",
"@storybook/preset-scss",
"@storybook/addon-essentials",
"@storybook/addon-interactions",
],
framework: "@storybook/react",
core: {
builder: "webpack5",
},
};

17
.storybook/main.ts Normal file
View File

@@ -0,0 +1,17 @@
import type { StorybookConfig } from "@storybook/react-vite";
const config: StorybookConfig = {
stories: ["../src/**/*.mdx", "../src/**/*.stories.@(js|jsx|ts|tsx)"],
addons: [
"@storybook/addon-links",
"@storybook/addon-essentials",
"@storybook/addon-interactions",
],
framework: {
name: "@storybook/react-vite",
options: {},
},
docs: {
autodocs: "tag",
},
};
export default config;

View File

@@ -0,0 +1,3 @@
<script>
window.global = window;
</script>

View File

@@ -1,9 +0,0 @@
export const parameters = {
actions: { argTypesRegex: "^on[A-Z].*" },
controls: {
matchers: {
color: /(background|color)$/i,
date: /Date$/,
},
},
}

18
.storybook/preview.ts Normal file
View File

@@ -0,0 +1,18 @@
import type { Preview } from "@storybook/react";
const preview: Preview = {
parameters: {
backgrounds: {
default: "light",
},
actions: { argTypesRegex: "^on[A-Z].*" },
controls: {
matchers: {
color: /(background|color)$/i,
date: /Date$/,
},
},
},
};
export default preview;

View File

@@ -8,7 +8,9 @@
"build": "vite build", "build": "vite build",
"dev": "rimraf dist && npm run build && vite", "dev": "rimraf dist && npm run build && vite",
"prod": "npm run build && vite", "prod": "npm run build && vite",
"docs": "jsdoc -c jsdoc.json" "docs": "jsdoc -c jsdoc.json",
"storybook": "storybook dev -p 6006",
"build-storybook": "storybook build"
}, },
"author": "Rishi Ghan", "author": "Rishi Ghan",
"license": "MIT", "license": "MIT",
@@ -93,6 +95,13 @@
"@babel/preset-env": "^7.20.2", "@babel/preset-env": "^7.20.2",
"@babel/preset-react": "^7.18.6", "@babel/preset-react": "^7.18.6",
"@babel/preset-typescript": "^7.13.0", "@babel/preset-typescript": "^7.13.0",
"@storybook/addon-essentials": "^7.0.0-rc.3",
"@storybook/addon-interactions": "^7.0.0-rc.3",
"@storybook/addon-links": "^7.0.0-rc.3",
"@storybook/blocks": "^7.0.0-rc.3",
"@storybook/react": "^7.0.0-rc.3",
"@storybook/react-vite": "^7.0.0-rc.3",
"@storybook/testing-library": "^0.0.14-next.1",
"@tsconfig/node14": "^1.0.0", "@tsconfig/node14": "^1.0.0",
"@types/express": "^4.17.8", "@types/express": "^4.17.8",
"@types/jest": "^26.0.20", "@types/jest": "^26.0.20",
@@ -117,6 +126,7 @@
"eslint-plugin-jsx-a11y": "^6.0.3", "eslint-plugin-jsx-a11y": "^6.0.3",
"eslint-plugin-prettier": "^3.3.1", "eslint-plugin-prettier": "^3.3.1",
"eslint-plugin-react": "^7.22.0", "eslint-plugin-react": "^7.22.0",
"eslint-plugin-storybook": "^0.6.11",
"express": "^4.17.1", "express": "^4.17.1",
"install": "^0.13.0", "install": "^0.13.0",
"jest": "^26.6.3", "jest": "^26.6.3",
@@ -126,8 +136,9 @@
"react-refresh": "^0.14.0", "react-refresh": "^0.14.0",
"rimraf": "^4.1.3", "rimraf": "^4.1.3",
"sass": "^1.58.1", "sass": "^1.58.1",
"storybook": "^7.0.0-rc.3",
"tslint": "^6.1.3", "tslint": "^6.1.3",
"typescript": "^4.2.3", "typescript": "^4.9",
"vite": "^4.1.1" "vite": "^4.1.1"
} }
} }

View File

@@ -301,7 +301,7 @@ export const searchIssue = (query, options) => async (dispatch) => {
case "wantedComicsPage": case "wantedComicsPage":
dispatch({ dispatch({
type: WANTED_COMICS_FETCHED, type: WANTED_COMICS_FETCHED,
data: response.data.body, data: response.data.hits,
}); });
break; break;
case "globalSearchBar": case "globalSearchBar":
@@ -314,13 +314,13 @@ export const searchIssue = (query, options) => async (dispatch) => {
case "libraryPage": case "libraryPage":
dispatch({ dispatch({
type: SS_SEARCH_RESULTS_FETCHED, type: SS_SEARCH_RESULTS_FETCHED,
data: response.data.body, data: response.data.hits,
}); });
break; break;
case "volumesPage": case "volumesPage":
dispatch({ dispatch({
type: VOLUMES_FETCHED, type: VOLUMES_FETCHED,
data: response.data.body, data: response.data.hits,
}); });
break; break;

View File

@@ -3,7 +3,6 @@ import { getTransfers } from "../../actions/airdcpp.actions";
import { useDispatch, useSelector } from "react-redux"; import { useDispatch, useSelector } from "react-redux";
import { AirDCPPSocketContext } from "../../context/AirDCPPSocket"; import { AirDCPPSocketContext } from "../../context/AirDCPPSocket";
import { isEmpty, isNil, isUndefined } from "lodash"; import { isEmpty, isNil, isUndefined } from "lodash";
import { searchIssue } from "../../actions/fileops.actions";
import { determineCoverFile } from "../../shared/utils/metadata.utils"; import { determineCoverFile } from "../../shared/utils/metadata.utils";
import MetadataPanel from "../shared/MetadataPanel"; import MetadataPanel from "../shared/MetadataPanel";
@@ -47,7 +46,6 @@ export const Downloads = (props: IDownloadsProps): ReactElement => {
}) })
setBundles(foo); setBundles(foo);
} }
}, [issueBundles]) }, [issueBundles])
return !isNil(bundles) ? return !isNil(bundles) ?
@@ -56,9 +54,9 @@ export const Downloads = (props: IDownloadsProps): ReactElement => {
<h1 className="title">Downloads</h1> <h1 className="title">Downloads</h1>
<div className="columns"> <div className="columns">
<div className="column is-half"> <div className="column is-half">
{bundles.map(bundle => { {bundles.map((bundle, idx) => {
console.log(bundle); console.log(bundle);
return <> return <div key={idx}>
<MetadataPanel <MetadataPanel
data={bundle} data={bundle}
imageStyle={{ maxWidth: 80 }} imageStyle={{ maxWidth: 80 }}
@@ -70,30 +68,33 @@ export const Downloads = (props: IDownloadsProps): ReactElement => {
margin: "0 0 8px 0", margin: "0 0 8px 0",
}} /> }} />
<table className="table is-size-7"> <table className="table is-size-7">
<thead>
<tr> <tr>
<th>Name</th> <th>Name</th>
<th>Size</th> <th>Size</th>
<th>Type</th> <th>Type</th>
<th>Bundle ID</th> <th>Bundle ID</th>
</tr> </tr>
</thead>
{bundle.acquisition.directconnect.downloads.map((bundle) => { <tbody>
return(<tr> {bundle.acquisition.directconnect.downloads.map((bundle, idx) => {
return (<tr key={idx}>
<td>{bundle.name}</td> <td>{bundle.name}</td>
<td>{bundle.size}</td> <td>{bundle.size}</td>
<td>{bundle.type.str}</td> <td>{bundle.type.str}</td>
<td><span className="tag is-warning">{bundle.bundleId}</span></td> <td><span className="tag is-warning">{bundle.bundleId}</span></td>
</tr>) </tr>)
})} })}
</table> </tbody>
</table>
{/* <pre>{JSON.stringify(bundle.acquisition.directconnect.downloads, null, 2)}</pre> */} {/* <pre>{JSON.stringify(bundle.acquisition.directconnect.downloads, null, 2)}</pre> */}
</> </div>
})} })}
</div> </div>
</div> </div>
</section> </section>
</div> : <div>asd</div>; </div> : <div>There are no downloads.</div>;
}; };
export default Downloads; export default Downloads;

View File

@@ -61,9 +61,10 @@ export const SearchBar = (data: ISearchBarProps): ReactElement => {
margin: "60px 0 0 350px", margin: "60px 0 0 350px",
}} }}
> >
{map(searchResults, (result) => ( {map(searchResults, (result, idx) => (
<MetadataPanel <MetadataPanel
data={result} data={result}
key={idx}
imageStyle={{ maxWidth: 70 }} imageStyle={{ maxWidth: 70 }}
titleStyle={{ fontSize: "0.8rem" }} titleStyle={{ fontSize: "0.8rem" }}
tagsStyle={{ fontSize: "0.7rem" }} tagsStyle={{ fontSize: "0.7rem" }}

View File

@@ -19,10 +19,7 @@ export const Library = (): ReactElement => {
const searchResults = useSelector( const searchResults = useSelector(
(state: RootState) => state.fileOps.libraryComics, (state: RootState) => state.fileOps.libraryComics,
); );
const searchError = useSelector((state: RootState) => { const searchError = useSelector((state: RootState) => state.fileOps.librarySearchError);
console.log(state);
return state.fileOps.librarySearchError;
});
const dispatch = useDispatch(); const dispatch = useDispatch();
useEffect(() => { useEffect(() => {
dispatch( dispatch(
@@ -221,9 +218,9 @@ export const Library = (): ReactElement => {
<div> <div>
<div className="library"> <div className="library">
<T2Table <T2Table
totalPages={searchResults.hits.total.value} totalPages={searchResults.total.value}
columns={columns} columns={columns}
sourceData={searchResults?.hits?.hits} sourceData={searchResults?.hits}
rowClickHandler={navigateToComicDetail} rowClickHandler={navigateToComicDetail}
paginationHandlers={{ paginationHandlers={{
nextPage, nextPage,

View File

@@ -166,8 +166,8 @@ export const Volumes = (props): ReactElement => {
<div> <div>
<div className="library"> <div className="library">
<T2Table <T2Table
sourceData={volumes?.hits?.hits} sourceData={volumes?.hits}
totalPages={volumes.hits.hits.length} totalPages={volumes.hits.length}
paginationHandlers={{ paginationHandlers={{
nextPage: () => {}, nextPage: () => {},
previousPage: () => {}, previousPage: () => {},

View File

@@ -73,8 +73,8 @@ export const WantedComics = (props): ReactElement => {
id: "downloadDetails", id: "downloadDetails",
accessorKey: "acquisition", accessorKey: "acquisition",
cell: data => <ol> cell: data => <ol>
{data.getValue().directconnect.downloads.map(download => { {data.getValue().directconnect.downloads.map((download, idx) => {
return <li className="is-size-7">{download.name}</li>; return <li className="is-size-7" key={idx}>{download.name}</li>;
})} })}
</ol> </ol>
}, },

View File

@@ -20,8 +20,6 @@ export const T2Table = (tableOptions): ReactElement => {
pageIndex: 1, pageIndex: 1,
pageSize: 15, pageSize: 15,
}); });
console.log(sourceData)
const pagination = useMemo( const pagination = useMemo(
() => ({ () => ({
@@ -81,12 +79,12 @@ export const T2Table = (tableOptions): ReactElement => {
{/* <p>{totalPages} comics in all</p> */} {/* <p>{totalPages} comics in all</p> */}
</div> </div>
<div className="field has-addons"> <div className="field has-addons">
<p className="control"> <div className="control">
<div className="button" onClick={() => goToPreviousPage()}> <i className="fas fa-chevron-left"></i></div> <div className="button" onClick={() => goToPreviousPage()}> <i className="fas fa-chevron-left"></i></div>
</p> </div>
<p className="control"> <div className="control">
<div className="button" onClick={() => goToNextPage()}> <i className="fas fa-chevron-right"></i> </div> <div className="button" onClick={() => goToNextPage()}> <i className="fas fa-chevron-right"></i> </div>
</p> </div>
<div className="field has-addons ml-5"> <div className="field has-addons ml-5">
<p className="control"> <p className="control">

View File

@@ -246,7 +246,7 @@ function fileOpsReducer(state = initialState, action) {
case WANTED_COMICS_FETCHED: { case WANTED_COMICS_FETCHED: {
const foo = []; const foo = [];
if (!isUndefined(action.data.hits)) { if (!isUndefined(action.data.hits)) {
map(action.data.hits.hits, ({ _source }) => { map(action.data.hits, ({ _source }) => {
foo.push(_source); foo.push(_source);
}); });
} }

View File

@@ -30,20 +30,20 @@ RawFileDetails.args = {
}, },
"inferredMetadata": { "inferredMetadata": {
"issue": { "issue": {
"name": "Fantastic Four 143", "name": "Batman Annual 02",
"number": 197402, "number": 197402,
"year": "1974", "year": "1974",
"subtitle": "" "subtitle": ""
} }
}, },
"rawFileDetails": { "rawFileDetails": {
"name": "197402 Fantastic Four 143", "name": "Batman Annual 02",
"filePath": "/Users/rishi/work/threetwo-core-service/comics/197402 Fantastic Four 143.cbz", "filePath": "/Users/rishi/work/threetwo-core-service/comics/197402 Fantastic Four 143.cbz",
"fileSize": 10341074, "fileSize": 10341074,
"extension": ".cbz", "extension": ".cbz",
"containedIn": "./userdata/covers/197402 Fantastic Four 143", "containedIn": "./userdata/covers/197402 Fantastic Four 143",
"cover": { "cover": {
"filePath": "userdata/covers/197402 Fantastic Four 143/FF143_01.jpg" "filePath": "userdata/covers/Batman Annual 02/Batman 002_00a.jpg"
} }
}, },
"sourcedMetadata": { "comicInfo": null, "comicvine": { "aliases": [] } }, "sourcedMetadata": { "comicInfo": null, "comicvine": { "aliases": [] } },

2977
yarn.lock

File diff suppressed because it is too large Load Diff