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