// @flow import * as ICONS from 'constants/icons'; import React from 'react'; import Button from 'component/button'; import classnames from 'classnames'; import Icon from 'component/common/icon'; import LbcMessage from 'component/common/lbc-message'; type Props = { removeSnack: any => void, snack: ?{ linkTarget: ?string, linkText: ?string, message: string, isError: boolean, }, }; class SnackBar extends React.PureComponent { constructor(props: Props) { super(props); this.displayTime = 5; // in seconds this.hideTimeout = null; } hideTimeout: ?TimeoutID; displayTime: number; render() { const { snack, removeSnack } = this.props; if (!snack) { this.hideTimeout = null; // should be unmounting anyway, but be safe? return null; } const { message, linkText, linkTarget, isError } = snack; if (this.hideTimeout === null) { this.hideTimeout = setTimeout(() => { this.hideTimeout = null; removeSnack(); }, this.displayTime * 1000); } return (
{message}
{linkText && linkTarget && ( // This is a little weird because of `linkTarget` code in `lbry-redux` // Any navigation code should happen in the app, and that should be removed from lbry-redux
); } } export default SnackBar;