41 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import * as _ from 'lodash';
 | 
						|
import Snackbar from 'material-ui/Snackbar';
 | 
						|
import * as React from 'react';
 | 
						|
import { Dispatcher } from 'ts/redux/dispatcher';
 | 
						|
 | 
						|
const SHOW_DURATION_MS = 4000;
 | 
						|
 | 
						|
interface FlashMessageProps {
 | 
						|
    dispatcher: Dispatcher;
 | 
						|
    flashMessage?: string | React.ReactNode;
 | 
						|
    showDurationMs?: number;
 | 
						|
    bodyStyle?: React.CSSProperties;
 | 
						|
}
 | 
						|
 | 
						|
interface FlashMessageState {}
 | 
						|
 | 
						|
export class FlashMessage extends React.Component<FlashMessageProps, FlashMessageState> {
 | 
						|
    public static defaultProps: Partial<FlashMessageProps> = {
 | 
						|
        showDurationMs: SHOW_DURATION_MS,
 | 
						|
        bodyStyle: {},
 | 
						|
    };
 | 
						|
    public render(): React.ReactNode {
 | 
						|
        if (!_.isUndefined(this.props.flashMessage)) {
 | 
						|
            return (
 | 
						|
                <Snackbar
 | 
						|
                    open={true}
 | 
						|
                    message={this.props.flashMessage}
 | 
						|
                    autoHideDuration={this.props.showDurationMs}
 | 
						|
                    onRequestClose={this._onClose.bind(this)}
 | 
						|
                    bodyStyle={this.props.bodyStyle}
 | 
						|
                />
 | 
						|
            );
 | 
						|
        } else {
 | 
						|
            return null;
 | 
						|
        }
 | 
						|
    }
 | 
						|
    private _onClose(): void {
 | 
						|
        this.props.dispatcher.hideFlashMessage();
 | 
						|
    }
 | 
						|
}
 |