Add refresh button to messages list

Fixes #171
This commit is contained in:
foxbit19 2019-10-19 09:15:10 +02:00 committed by Jannis Mattheis
parent d6055f3363
commit bdb6372235
10 changed files with 66 additions and 44 deletions

View File

@ -13,6 +13,7 @@ import CloudUpload from '@material-ui/icons/CloudUpload';
import React, {ChangeEvent, Component, SFC} from 'react'; import React, {ChangeEvent, Component, SFC} from 'react';
import ConfirmDialog from '../common/ConfirmDialog'; import ConfirmDialog from '../common/ConfirmDialog';
import DefaultPage from '../common/DefaultPage'; import DefaultPage from '../common/DefaultPage';
import Button from '@material-ui/core/Button';
import ToggleVisibility from '../common/ToggleVisibility'; import ToggleVisibility from '../common/ToggleVisibility';
import AddApplicationDialog from './AddApplicationDialog'; import AddApplicationDialog from './AddApplicationDialog';
import {observer} from 'mobx-react'; import {observer} from 'mobx-react';
@ -47,10 +48,16 @@ class Applications extends Component<Stores<'appStore'>> {
return ( return (
<DefaultPage <DefaultPage
title="Applications" title="Applications"
buttonTitle="Create Application" rightControl={
buttonId="create-app" <Button
maxWidth={1000} id="create-app"
fButton={() => (this.createDialog = true)}> variant="contained"
color="primary"
onClick={() => (this.createDialog = true)}>
Create Application
</Button>
}
maxWidth={1000}>
<Grid item xs={12}> <Grid item xs={12}>
<Paper elevation={6}> <Paper elevation={6}>
<Table id="app-table"> <Table id="app-table">

View File

@ -11,6 +11,7 @@ import Edit from '@material-ui/icons/Edit';
import React, {Component, SFC} from 'react'; import React, {Component, SFC} from 'react';
import ConfirmDialog from '../common/ConfirmDialog'; import ConfirmDialog from '../common/ConfirmDialog';
import DefaultPage from '../common/DefaultPage'; import DefaultPage from '../common/DefaultPage';
import Button from '@material-ui/core/Button';
import ToggleVisibility from '../common/ToggleVisibility'; import ToggleVisibility from '../common/ToggleVisibility';
import AddClientDialog from './AddClientDialog'; import AddClientDialog from './AddClientDialog';
import UpdateDialog from './UpdateClientDialog'; import UpdateDialog from './UpdateClientDialog';
@ -42,9 +43,15 @@ class Clients extends Component<Stores<'clientStore'>> {
return ( return (
<DefaultPage <DefaultPage
title="Clients" title="Clients"
buttonTitle="Create Client" rightControl={
buttonId="create-client" <Button
fButton={() => (this.showDialog = true)}> id="create-client"
variant="contained"
color="primary"
onClick={() => (this.showDialog = true)}>
Create Client
</Button>
}>
<Grid item xs={12}> <Grid item xs={12}>
<Paper elevation={6}> <Paper elevation={6}>
<Table id="client-table"> <Table id="client-table">

View File

@ -1,44 +1,21 @@
import Button from '@material-ui/core/Button';
import Grid from '@material-ui/core/Grid'; import Grid from '@material-ui/core/Grid';
import Typography from '@material-ui/core/Typography'; import Typography from '@material-ui/core/Typography';
import React, {SFC} from 'react'; import React, {SFC} from 'react';
interface IProps { interface IProps {
title: string; title: string;
buttonTitle?: string; rightControl?: React.ReactNode;
fButton?: VoidFunction;
buttonDisabled?: boolean;
maxWidth?: number; maxWidth?: number;
hideButton?: boolean;
buttonId?: string;
} }
const DefaultPage: SFC<IProps> = ({ const DefaultPage: SFC<IProps> = ({title, rightControl, maxWidth = 700, children}) => (
title,
buttonTitle,
buttonId,
fButton,
buttonDisabled = false,
maxWidth = 700,
hideButton,
children,
}) => (
<main style={{margin: '0 auto', maxWidth}}> <main style={{margin: '0 auto', maxWidth}}>
<Grid container spacing={4}> <Grid container spacing={4}>
<Grid item xs={12} style={{display: 'flex'}}> <Grid item xs={12} style={{display: 'flex'}}>
<Typography variant="h4" style={{flex: 1}}> <Typography variant="h4" style={{flex: 1}}>
{title} {title}
</Typography> </Typography>
{hideButton ? null : ( {rightControl}
<Button
id={buttonId}
variant="contained"
color="primary"
disabled={buttonDisabled}
onClick={fButton}>
{buttonTitle}
</Button>
)}
</Grid> </Grid>
{children} {children}
</Grid> </Grid>

View File

@ -5,7 +5,7 @@ import DefaultPage from './DefaultPage';
export default function LoadingSpinner() { export default function LoadingSpinner() {
return ( return (
<DefaultPage title="" maxWidth={250} hideButton={true}> <DefaultPage title="" maxWidth={250}>
<Grid item xs={12} style={{textAlign: 'center'}}> <Grid item xs={12} style={{textAlign: 'center'}}>
<CircularProgress size={150} /> <CircularProgress size={150} />
</Grid> </Grid>

View File

@ -4,6 +4,7 @@ import Typography from '@material-ui/core/Typography';
import React, {Component} from 'react'; import React, {Component} from 'react';
import {RouteComponentProps} from 'react-router'; import {RouteComponentProps} from 'react-router';
import DefaultPage from '../common/DefaultPage'; import DefaultPage from '../common/DefaultPage';
import Button from '@material-ui/core/Button';
import Message from './Message'; import Message from './Message';
import {observer} from 'mobx-react'; import {observer} from 'mobx-react';
import {inject, Stores} from '../inject'; import {inject, Stores} from '../inject';
@ -61,10 +62,27 @@ class Messages extends Component<IProps & Stores<'messagesStore' | 'appStore'>,
return ( return (
<DefaultPage <DefaultPage
title={name} title={name}
buttonTitle="Delete All" rightControl={
buttonId="delete-all" <div>
fButton={() => messagesStore.removeByApp(appId)} <Button
buttonDisabled={!hasMessages}> id="refresh-all"
variant="contained"
disabled={!hasMessages}
color="primary"
onClick={() => messagesStore.refreshByApp(appId)}
style={{marginRight: 5}}>
Refresh
</Button>
<Button
id="delete-all"
variant="contained"
disabled={!hasMessages}
color="primary"
onClick={() => messagesStore.removeByApp(appId)}>
Delete All
</Button>
</div>
}>
{hasMessages ? ( {hasMessages ? (
<div style={{width: '100%'}} id="messages"> <div style={{width: '100%'}} id="messages">
<ReactInfinite <ReactInfinite

View File

@ -100,6 +100,12 @@ export class MessagesStore {
this.createEmptyStatesForApps(this.appStore.getItems()); this.createEmptyStatesForApps(this.appStore.getItems());
}; };
@action
public refreshByApp = async (appId: number) => {
this.clearAll();
this.loadMore(appId);
};
public exists = (id: number) => this.stateOf(id).loaded; public exists = (id: number) => this.stateOf(id).loaded;
private removeFromList(messages: IMessage[], messageToDelete: IMessage): false | number { private removeFromList(messages: IMessage[], messageToDelete: IMessage): false | number {

View File

@ -70,7 +70,7 @@ class PluginDetailView extends Component<IProps & Stores<'pluginStore'>, IState>
const pluginInfo = this.pluginInfo(); const pluginInfo = this.pluginInfo();
const {name, capabilities} = pluginInfo; const {name, capabilities} = pluginInfo;
return ( return (
<DefaultPage title={name} hideButton={true} maxWidth={1000}> <DefaultPage title={name} maxWidth={1000}>
<PanelWrapper name={'Plugin Info'} icon={Info}> <PanelWrapper name={'Plugin Info'} icon={Info}>
<PluginInfo pluginInfo={pluginInfo} /> <PluginInfo pluginInfo={pluginInfo} />
</PanelWrapper> </PanelWrapper>

View File

@ -25,7 +25,7 @@ class Plugins extends Component<Stores<'pluginStore'>> {
} = this; } = this;
const plugins = pluginStore.getItems(); const plugins = pluginStore.getItems();
return ( return (
<DefaultPage title="Plugins" hideButton={true} maxWidth={1000}> <DefaultPage title="Plugins" maxWidth={1000}>
<Grid item xs={12}> <Grid item xs={12}>
<Paper elevation={6}> <Paper elevation={6}>
<Table id="plugin-table"> <Table id="plugin-table">

View File

@ -18,7 +18,7 @@ class Login extends Component<Stores<'currentUser'>> {
public render() { public render() {
const {username, password} = this; const {username, password} = this;
return ( return (
<DefaultPage title="Login" maxWidth={250} hideButton={true}> <DefaultPage title="Login" maxWidth={250}>
<Grid item xs={12} style={{textAlign: 'center'}}> <Grid item xs={12} style={{textAlign: 'center'}}>
<Container> <Container>
<form onSubmit={this.preventDefault} id="login-form"> <form onSubmit={this.preventDefault} id="login-form">

View File

@ -12,6 +12,7 @@ import Edit from '@material-ui/icons/Edit';
import React, {Component, SFC} from 'react'; import React, {Component, SFC} from 'react';
import ConfirmDialog from '../common/ConfirmDialog'; import ConfirmDialog from '../common/ConfirmDialog';
import DefaultPage from '../common/DefaultPage'; import DefaultPage from '../common/DefaultPage';
import Button from '@material-ui/core/Button';
import AddEditDialog from './AddEditUserDialog'; import AddEditDialog from './AddEditUserDialog';
import {observer} from 'mobx-react'; import {observer} from 'mobx-react';
import {observable} from 'mobx'; import {observable} from 'mobx';
@ -69,9 +70,15 @@ class Users extends Component<WithStyles<'wrapper'> & Stores<'userStore'>> {
return ( return (
<DefaultPage <DefaultPage
title="Users" title="Users"
buttonTitle="Create User" rightControl={
buttonId="create-user" <Button
fButton={() => (this.createDialog = true)}> id="create-user"
variant="contained"
color="primary"
onClick={() => (this.createDialog = true)}>
Create User
</Button>
}>
<Grid item xs={12}> <Grid item xs={12}>
<Paper elevation={6}> <Paper elevation={6}>
<Table id="user-table"> <Table id="user-table">