mirror of
https://github.com/tachiyomiorg/tachiyomi-extensions-inspector.git
synced 2025-01-12 00:39:07 +01:00
add toast lib
This commit is contained in:
parent
3de9ccc62f
commit
5f23691e20
@ -6,6 +6,7 @@
|
|||||||
"@fontsource/roboto": "^4.3.0",
|
"@fontsource/roboto": "^4.3.0",
|
||||||
"@material-ui/core": "^4.11.4",
|
"@material-ui/core": "^4.11.4",
|
||||||
"@material-ui/icons": "^4.11.2",
|
"@material-ui/icons": "^4.11.2",
|
||||||
|
"@material-ui/lab": "^4.0.0-alpha.58",
|
||||||
"axios": "^0.21.1",
|
"axios": "^0.21.1",
|
||||||
"file-selector": "^0.2.4",
|
"file-selector": "^0.2.4",
|
||||||
"react": "^17.0.2",
|
"react": "^17.0.2",
|
||||||
|
62
webUI/react/src/components/Toast.tsx
Normal file
62
webUI/react/src/components/Toast.tsx
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
||||||
|
import ReactDOM from 'react-dom';
|
||||||
|
import React from 'react';
|
||||||
|
import Slide, { SlideProps } from '@material-ui/core/Slide';
|
||||||
|
import Snackbar from '@material-ui/core/Snackbar';
|
||||||
|
import MuiAlert, { AlertProps, Color as Severity } from '@material-ui/lab/Alert';
|
||||||
|
|
||||||
|
function removeToast(id: string) {
|
||||||
|
const container = document.querySelector(`#${id}`)!!;
|
||||||
|
ReactDOM.unmountComponentAtNode(container);
|
||||||
|
document.body.removeChild(container);
|
||||||
|
}
|
||||||
|
|
||||||
|
function Transition(props: SlideProps) {
|
||||||
|
// eslint-disable-next-line react/jsx-props-no-spreading
|
||||||
|
return <Slide {...props} direction="up" />;
|
||||||
|
}
|
||||||
|
|
||||||
|
function Alert(props: AlertProps) {
|
||||||
|
// eslint-disable-next-line react/jsx-props-no-spreading
|
||||||
|
return <MuiAlert elevation={6} variant="filled" {...props} />;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IToastProps{
|
||||||
|
message: string
|
||||||
|
severity: Severity
|
||||||
|
}
|
||||||
|
|
||||||
|
function Toast(props: IToastProps) {
|
||||||
|
const { message, severity } = props;
|
||||||
|
const [open, setOpen] = React.useState(true);
|
||||||
|
|
||||||
|
const handleClose = () => {
|
||||||
|
setOpen(false);
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Snackbar
|
||||||
|
open={open}
|
||||||
|
onClose={handleClose}
|
||||||
|
autoHideDuration={3000}
|
||||||
|
TransitionComponent={Transition}
|
||||||
|
message="I love snacks"
|
||||||
|
>
|
||||||
|
<MuiAlert elevation={6} variant="filled" onClose={handleClose} severity={severity}>
|
||||||
|
{message}
|
||||||
|
</MuiAlert>
|
||||||
|
</Snackbar>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function makeToast(message: string, severity: Severity) {
|
||||||
|
const id = Math.floor(Math.random() * 1000);
|
||||||
|
const container = document.createElement('div');
|
||||||
|
container.id = `alert-${id}`;
|
||||||
|
|
||||||
|
document.body.appendChild(container);
|
||||||
|
|
||||||
|
ReactDOM.render(<Toast message={message} severity={severity} />, container);
|
||||||
|
|
||||||
|
setTimeout(() => removeToast(container.id), 3500);
|
||||||
|
}
|
@ -15,6 +15,7 @@ import MangaDetails from '../components/MangaDetails';
|
|||||||
import NavbarContext from '../context/NavbarContext';
|
import NavbarContext from '../context/NavbarContext';
|
||||||
import client from '../util/client';
|
import client from '../util/client';
|
||||||
import LoadingPlaceholder from '../components/LoadingPlaceholder';
|
import LoadingPlaceholder from '../components/LoadingPlaceholder';
|
||||||
|
import makeToast from '../components/Toast';
|
||||||
|
|
||||||
const useStyles = makeStyles((theme: Theme) => ({
|
const useStyles = makeStyles((theme: Theme) => ({
|
||||||
root: {
|
root: {
|
||||||
@ -77,12 +78,17 @@ export default function Manga() {
|
|||||||
}, [manga]);
|
}, [manga]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const shouldFetchOnline = chapters.length > 0 && chapterUpdateTriggerer === 0;
|
const shouldFetchOnline = fetchedChapters && chapterUpdateTriggerer === 0;
|
||||||
client.get(`/api/v1/manga/${id}/chapters?onlineFetch=${shouldFetchOnline}`)
|
client.get(`/api/v1/manga/${id}/chapters?onlineFetch=${shouldFetchOnline}`)
|
||||||
.then((response) => response.data)
|
.then((response) => response.data)
|
||||||
.then((data) => setChapters(data))
|
.then((data) => {
|
||||||
|
if (data.length === 0 && fetchedChapters) {
|
||||||
|
makeToast('No chapters found', 'warning');
|
||||||
|
}
|
||||||
|
setChapters(data);
|
||||||
|
})
|
||||||
.then(() => setFetchedChapters(true));
|
.then(() => setFetchedChapters(true));
|
||||||
}, [chapters.length, chapterUpdateTriggerer]);
|
}, [chapters.length, fetchedChapters, chapterUpdateTriggerer]);
|
||||||
|
|
||||||
// const itemContent = (index:any) => <InnerItem chapters={chapters} index={index} />;
|
// const itemContent = (index:any) => <InnerItem chapters={chapters} index={index} />;
|
||||||
const itemContent = (index:any) => (
|
const itemContent = (index:any) => (
|
||||||
|
@ -1487,6 +1487,17 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime" "^7.4.4"
|
"@babel/runtime" "^7.4.4"
|
||||||
|
|
||||||
|
"@material-ui/lab@^4.0.0-alpha.58":
|
||||||
|
version "4.0.0-alpha.58"
|
||||||
|
resolved "https://registry.yarnpkg.com/@material-ui/lab/-/lab-4.0.0-alpha.58.tgz#c7ebb66f49863c5acbb20817163737caa299fafc"
|
||||||
|
integrity sha512-GKHlJqLxUeHH3L3dGQ48ZavYrqGOTXkFkiEiuYMAnAvXAZP4rhMIqeHOPXSUQan4Bd8QnafDcpovOSLnadDmKw==
|
||||||
|
dependencies:
|
||||||
|
"@babel/runtime" "^7.4.4"
|
||||||
|
"@material-ui/utils" "^4.11.2"
|
||||||
|
clsx "^1.0.4"
|
||||||
|
prop-types "^15.7.2"
|
||||||
|
react-is "^16.8.0 || ^17.0.0"
|
||||||
|
|
||||||
"@material-ui/styles@^4.11.4":
|
"@material-ui/styles@^4.11.4":
|
||||||
version "4.11.4"
|
version "4.11.4"
|
||||||
resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-4.11.4.tgz#eb9dfccfcc2d208243d986457dff025497afa00d"
|
resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-4.11.4.tgz#eb9dfccfcc2d208243d986457dff025497afa00d"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user