Port f41ec9af05
to glitch-soc
Co-authored-by: Yamagishi Kazutoshi <ykzts@desire.sh>
Signed-off-by: Claire <claire.github-309c@sitedethib.com>
local
parent
e5720cd540
commit
dea951cce8
16 changed files with 139 additions and 32 deletions
@ -0,0 +1,51 @@ |
||||
import React from 'react'; |
||||
import IconButton from './icon_button'; |
||||
import PropTypes from 'prop-types'; |
||||
import { injectIntl, defineMessages } from 'react-intl'; |
||||
import { bannerSettings } from 'flavours/glitch/settings'; |
||||
|
||||
const messages = defineMessages({ |
||||
dismiss: { id: 'dismissable_banner.dismiss', defaultMessage: 'Dismiss' }, |
||||
}); |
||||
|
||||
export default @injectIntl |
||||
class DismissableBanner extends React.PureComponent { |
||||
|
||||
static propTypes = { |
||||
id: PropTypes.string.isRequired, |
||||
children: PropTypes.node, |
||||
intl: PropTypes.object.isRequired, |
||||
}; |
||||
|
||||
state = { |
||||
visible: !bannerSettings.get(this.props.id), |
||||
}; |
||||
|
||||
handleDismiss = () => { |
||||
const { id } = this.props; |
||||
this.setState({ visible: false }, () => bannerSettings.set(id, true)); |
||||
} |
||||
|
||||
render () { |
||||
const { visible } = this.state; |
||||
|
||||
if (!visible) { |
||||
return null; |
||||
} |
||||
|
||||
const { children, intl } = this.props; |
||||
|
||||
return ( |
||||
<div className='dismissable-banner'> |
||||
<div className='dismissable-banner__message'> |
||||
{children} |
||||
</div> |
||||
|
||||
<div className='dismissable-banner__action'> |
||||
<IconButton icon='times' title={intl.formatMessage(messages.dismiss)} onClick={this.handleDismiss} /> |
||||
</div> |
||||
</div> |
||||
); |
||||
} |
||||
|
||||
} |
Loading…
Reference in new issue