6 Originally a part of `<Status>`, but extracted into a separate
7 component for better documentation and maintainance by
8 @kibi@glitch.social as a part of glitch-soc/mastodon.
18 import React
from 'react';
19 import PropTypes
from 'prop-types';
20 import ImmutablePropTypes
from 'react-immutable-proptypes';
21 import { defineMessages
, injectIntl
} from 'react-intl';
24 import Avatar
from '../../../mastodon/components/avatar';
25 import AvatarOverlay
from '../../../mastodon/components/avatar_overlay';
26 import DisplayName
from '../../../mastodon/components/display_name';
27 import IconButton
from '../../../mastodon/components/icon_button';
28 import VisibilityIcon
from './visibility_icon';
35 // Messages for use with internationalization stuff.
36 const messages
= defineMessages({
37 collapse: { id: 'status.collapse', defaultMessage: 'Collapse' },
38 uncollapse: { id: 'status.uncollapse', defaultMessage: 'Uncollapse' },
39 public: { id: 'privacy.public.short', defaultMessage: 'Public' },
40 unlisted: { id: 'privacy.unlisted.short', defaultMessage: 'Unlisted' },
41 private: { id: 'privacy.private.short', defaultMessage: 'Followers-only' },
42 direct: { id: 'privacy.direct.short', defaultMessage: 'Direct' },
51 export default class StatusHeader
extends React
.PureComponent
{
54 status: ImmutablePropTypes
.map
.isRequired
,
55 friend: ImmutablePropTypes
.map
,
56 mediaIcon: PropTypes
.string
,
57 collapsible: PropTypes
.bool
,
58 collapsed: PropTypes
.bool
,
59 parseClick: PropTypes
.func
.isRequired
,
60 setExpansion: PropTypes
.func
.isRequired
,
61 intl: PropTypes
.object
.isRequired
,
64 // Handles clicks on collapsed button
65 handleCollapsedClick
= (e
) => {
66 const { collapsed
, setExpansion
} = this.props
;
68 setExpansion(collapsed
? null : false);
73 // Handles clicks on account name/image
74 handleAccountClick
= (e
) => {
75 const { status
, parseClick
} = this.props
;
76 parseClick(e
, `/accounts/${+status.getIn(['account', 'id'])}`);
90 const account
= status
.get('account');
93 <header className
='status__info'>
95 href
={account
.get('url')}
97 className
='status__avatar'
98 onClick
={this.handleAccountClick
}
102 <AvatarOverlay account
={account
} friend
={friend
} />
104 <Avatar account
={account
} size
={48} />
109 href
={account
.get('url')}
111 className
='status__display-name'
112 onClick
={this.handleAccountClick
}
114 <DisplayName account
={account
} />
116 <div className
='status__info__icons'>
119 className
={`fa fa-fw fa-${mediaIcon}`}
124 <VisibilityIcon visibility
={status
.get('visibility')} />
128 className
='status__collapse-button'
133 intl
.formatMessage(messages
.uncollapse
) :
134 intl
.formatMessage(messages
.collapse
)
136 icon
='angle-double-up'
137 onClick
={this.handleCollapsedClick
}