[Glitch] Convert <DismissableBanner> to Typescript
				
					
				
			Port 9203ab410c to glitch-soc
Signed-off-by: Claire <claire.github-309c@sitedethib.com>
			
			
This commit is contained in:
		
							parent
							
								
									5cd9e85fbb
								
							
						
					
					
						commit
						5a6f556541
					
				
					 9 changed files with 54 additions and 62 deletions
				
			
		|  | @ -1,55 +0,0 @@ | |||
| import PropTypes from 'prop-types'; | ||||
| import { PureComponent } from 'react'; | ||||
| 
 | ||||
| import { injectIntl, defineMessages } from 'react-intl'; | ||||
| 
 | ||||
| import { bannerSettings } from 'flavours/glitch/settings'; | ||||
| 
 | ||||
| import { IconButton } from './icon_button'; | ||||
| 
 | ||||
| const messages = defineMessages({ | ||||
|   dismiss: { id: 'dismissable_banner.dismiss', defaultMessage: 'Dismiss' }, | ||||
| }); | ||||
| 
 | ||||
| class DismissableBanner extends 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> | ||||
|     ); | ||||
|   } | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| export default injectIntl(DismissableBanner); | ||||
|  | @ -0,0 +1,47 @@ | |||
| import type { PropsWithChildren } from 'react'; | ||||
| import { useCallback, useState } from 'react'; | ||||
| 
 | ||||
| import { defineMessages, useIntl } from 'react-intl'; | ||||
| 
 | ||||
| import { bannerSettings } from 'flavours/glitch/settings'; | ||||
| 
 | ||||
| import { IconButton } from './icon_button'; | ||||
| 
 | ||||
| const messages = defineMessages({ | ||||
|   dismiss: { id: 'dismissable_banner.dismiss', defaultMessage: 'Dismiss' }, | ||||
| }); | ||||
| 
 | ||||
| interface Props { | ||||
|   id: string; | ||||
| } | ||||
| 
 | ||||
| export const DismissableBanner: React.FC<PropsWithChildren<Props>> = ({ | ||||
|   id, | ||||
|   children, | ||||
| }) => { | ||||
|   const [visible, setVisible] = useState(!bannerSettings.get(id)); | ||||
|   const intl = useIntl(); | ||||
| 
 | ||||
|   const handleDismiss = useCallback(() => { | ||||
|     setVisible(false); | ||||
|     bannerSettings.set(id, true); | ||||
|   }, [id]); | ||||
| 
 | ||||
|   if (!visible) { | ||||
|     return null; | ||||
|   } | ||||
| 
 | ||||
|   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={handleDismiss} | ||||
|         /> | ||||
|       </div> | ||||
|     </div> | ||||
|   ); | ||||
| }; | ||||
|  | @ -12,7 +12,7 @@ import { connectCommunityStream } from 'flavours/glitch/actions/streaming'; | |||
| import { expandCommunityTimeline } from 'flavours/glitch/actions/timelines'; | ||||
| import Column from 'flavours/glitch/components/column'; | ||||
| import ColumnHeader from 'flavours/glitch/components/column_header'; | ||||
| import DismissableBanner from 'flavours/glitch/components/dismissable_banner'; | ||||
| import { DismissableBanner } from 'flavours/glitch/components/dismissable_banner'; | ||||
| import StatusListContainer from 'flavours/glitch/features/ui/containers/status_list_container'; | ||||
| import { domain } from 'flavours/glitch/initial_state'; | ||||
| 
 | ||||
|  |  | |||
|  | @ -7,7 +7,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; | |||
| import { connect } from 'react-redux'; | ||||
| 
 | ||||
| import { fetchTrendingLinks } from 'flavours/glitch/actions/trends'; | ||||
| import DismissableBanner from 'flavours/glitch/components/dismissable_banner'; | ||||
| import { DismissableBanner } from 'flavours/glitch/components/dismissable_banner'; | ||||
| import { LoadingIndicator } from 'flavours/glitch/components/loading_indicator'; | ||||
| 
 | ||||
| import Story from './components/story'; | ||||
|  |  | |||
|  | @ -9,7 +9,7 @@ import { connect } from 'react-redux'; | |||
| import { debounce } from 'lodash'; | ||||
| 
 | ||||
| import { fetchTrendingStatuses, expandTrendingStatuses } from 'flavours/glitch/actions/trends'; | ||||
| import DismissableBanner from 'flavours/glitch/components/dismissable_banner'; | ||||
| import { DismissableBanner } from 'flavours/glitch/components/dismissable_banner'; | ||||
| import StatusList from 'flavours/glitch/components/status_list'; | ||||
| import { getStatusList } from 'flavours/glitch/selectors'; | ||||
| 
 | ||||
|  |  | |||
|  | @ -7,7 +7,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; | |||
| import { connect } from 'react-redux'; | ||||
| 
 | ||||
| import { fetchTrendingHashtags } from 'flavours/glitch/actions/trends'; | ||||
| import DismissableBanner from 'flavours/glitch/components/dismissable_banner'; | ||||
| import { DismissableBanner } from 'flavours/glitch/components/dismissable_banner'; | ||||
| import { ImmutableHashtag as Hashtag } from 'flavours/glitch/components/hashtag'; | ||||
| import { LoadingIndicator } from 'flavours/glitch/components/loading_indicator'; | ||||
| 
 | ||||
|  |  | |||
|  | @ -10,7 +10,7 @@ import { addColumn } from 'flavours/glitch/actions/columns'; | |||
| import { changeSetting } from 'flavours/glitch/actions/settings'; | ||||
| import { connectPublicStream, connectCommunityStream } from 'flavours/glitch/actions/streaming'; | ||||
| import { expandPublicTimeline, expandCommunityTimeline } from 'flavours/glitch/actions/timelines'; | ||||
| import DismissableBanner from 'flavours/glitch/components/dismissable_banner'; | ||||
| import { DismissableBanner } from 'flavours/glitch/components/dismissable_banner'; | ||||
| import SettingText from 'flavours/glitch/components/setting_text'; | ||||
| import initialState, { domain } from 'flavours/glitch/initial_state'; | ||||
| import { useAppDispatch, useAppSelector } from 'flavours/glitch/store'; | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ import { FormattedMessage } from 'react-intl'; | |||
| 
 | ||||
| import { Link } from 'react-router-dom'; | ||||
| 
 | ||||
| import DismissableBanner from 'flavours/glitch/components/dismissable_banner'; | ||||
| import { DismissableBanner } from 'flavours/glitch/components/dismissable_banner'; | ||||
| import background from 'mastodon/../images/friends-cropped.png'; | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -12,7 +12,7 @@ import { connectPublicStream } from 'flavours/glitch/actions/streaming'; | |||
| import { expandPublicTimeline } from 'flavours/glitch/actions/timelines'; | ||||
| import Column from 'flavours/glitch/components/column'; | ||||
| import ColumnHeader from 'flavours/glitch/components/column_header'; | ||||
| import DismissableBanner from 'flavours/glitch/components/dismissable_banner'; | ||||
| import { DismissableBanner } from 'flavours/glitch/components/dismissable_banner'; | ||||
| import StatusListContainer from 'flavours/glitch/features/ui/containers/status_list_container'; | ||||
| import { domain } from 'flavours/glitch/initial_state'; | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue