Add monitorMangaList to App
This commit is contained in:
parent
65814dd942
commit
2f9eb61377
@ -2,6 +2,8 @@ import React, {ReactElement, useEffect} from 'react';
|
|||||||
import Footer from "./modules/Footer";
|
import Footer from "./modules/Footer";
|
||||||
import Search from "./modules/Search";
|
import Search from "./modules/Search";
|
||||||
import Header from "./modules/Header";
|
import Header from "./modules/Header";
|
||||||
|
import MonitorJobsList from "./modules/MonitorJobsList";
|
||||||
|
import './styles/Manga.css'
|
||||||
|
|
||||||
export default function App(){
|
export default function App(){
|
||||||
const [content, setContent] = React.useState<ReactElement>();
|
const [content, setContent] = React.useState<ReactElement>();
|
||||||
@ -13,7 +15,10 @@ export default function App(){
|
|||||||
if(result === null){
|
if(result === null){
|
||||||
setContent(<h1>No connection to backend</h1>);
|
setContent(<h1>No connection to backend</h1>);
|
||||||
}else{
|
}else{
|
||||||
setContent(<Search />)
|
setContent(<>
|
||||||
|
<Search />
|
||||||
|
<MonitorJobsList />
|
||||||
|
</>)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}, []);
|
}, []);
|
||||||
|
57
Website/modules/MonitorJobsList.tsx
Normal file
57
Website/modules/MonitorJobsList.tsx
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
import React, {MouseEventHandler, useEffect} from 'react';
|
||||||
|
import {Job} from './Job';
|
||||||
|
import '../styles/monitorMangaList.css';
|
||||||
|
import IJob from "./interfaces/IJob";
|
||||||
|
import IManga, {HTMLFromIManga} from "./interfaces/IManga";
|
||||||
|
import {Manga} from './Manga';
|
||||||
|
|
||||||
|
export default function MonitorJobsList(){
|
||||||
|
const [MonitoringJobs, setMonitoringJobs] = React.useState<IJob[]>([]);
|
||||||
|
const [AllManga, setAllManga] = React.useState<IManga[]>([]);
|
||||||
|
|
||||||
|
function UpdateMonitoringJobsList(){
|
||||||
|
Job.GetMonitoringJobs()
|
||||||
|
.then((jobs) => {
|
||||||
|
if(jobs.length > 0)
|
||||||
|
return Job.GetJobs(jobs)
|
||||||
|
return [];
|
||||||
|
})
|
||||||
|
.then((jobs) => setMonitoringJobs(jobs));
|
||||||
|
}
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
//Remove all Manga that are not associated with a Job
|
||||||
|
setAllManga(AllManga.filter(manga => MonitoringJobs.find(job => job.mangaInternalId == manga.internalId)));
|
||||||
|
//Fetch Manga that are missing (from Jobs)
|
||||||
|
if(MonitoringJobs === null)
|
||||||
|
return;
|
||||||
|
MonitoringJobs.forEach(job => {
|
||||||
|
if(AllManga.find(manga => manga.internalId == job.mangaInternalId))
|
||||||
|
return;
|
||||||
|
Manga.GetMangaById(job.mangaInternalId).then((manga: IManga) => setAllManga([...AllManga, manga]));
|
||||||
|
});
|
||||||
|
}, [MonitoringJobs]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
UpdateMonitoringJobsList();
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
const DeleteJob:MouseEventHandler = (e) => {
|
||||||
|
const jobId = e.currentTarget.id;
|
||||||
|
Job.DeleteJob(jobId);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div id="MonitorMangaList">
|
||||||
|
{AllManga.map((manga: IManga) => {
|
||||||
|
const job = MonitoringJobs.find(job => job.mangaInternalId == manga.internalId);
|
||||||
|
if(job === undefined || job == null)
|
||||||
|
return <div>Error. Could not find matching job for {manga.internalId}</div>
|
||||||
|
return <div key={"monitorMangaEntry." + manga.internalId} className="monitorMangaEntry">
|
||||||
|
{HTMLFromIManga(manga)}
|
||||||
|
{job.id}
|
||||||
|
<button id={job.id} onClick={DeleteJob}>Delete</button>
|
||||||
|
</div>;
|
||||||
|
})}
|
||||||
|
</div>)
|
||||||
|
}
|
@ -1,5 +1,6 @@
|
|||||||
import React, { ChangeEventHandler, MouseEventHandler, useEffect, useState} from 'react';
|
import React, { ChangeEventHandler, MouseEventHandler, useEffect, useState} from 'react';
|
||||||
import {MangaConnector} from "./MangaConnector";
|
import {MangaConnector} from "./MangaConnector";
|
||||||
|
import {Job} from "./Job";
|
||||||
import IMangaConnector from "./interfaces/IMangaConnector";
|
import IMangaConnector from "./interfaces/IMangaConnector";
|
||||||
import {isValidUri} from "../App";
|
import {isValidUri} from "../App";
|
||||||
import IManga, {HTMLFromIManga} from "./interfaces/IManga";
|
import IManga, {HTMLFromIManga} from "./interfaces/IManga";
|
||||||
|
11
Website/styles/monitorMangaList.css
Normal file
11
Website/styles/monitorMangaList.css
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#MonitorMangaList {
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
flex-flow: row;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
flex-grow: 1;
|
||||||
|
height: 100%;
|
||||||
|
overflow-y: scroll;
|
||||||
|
scrollbar-color: var(--accent-color) var(--primary-color);
|
||||||
|
scrollbar-width: thin;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user