forked from treehouse/mastodon
Add visibility icon to Detailed status
parent
e82021e0e6
commit
cb69e35b3b
|
@ -29,6 +29,7 @@ import Avatar from '../../../mastodon/components/avatar';
|
||||||
import AvatarOverlay from '../../../mastodon/components/avatar_overlay';
|
import AvatarOverlay from '../../../mastodon/components/avatar_overlay';
|
||||||
import DisplayName from '../../../mastodon/components/display_name';
|
import DisplayName from '../../../mastodon/components/display_name';
|
||||||
import IconButton from '../../../mastodon/components/icon_button';
|
import IconButton from '../../../mastodon/components/icon_button';
|
||||||
|
import VisibilityIcon from './visibility_icon';
|
||||||
|
|
||||||
/* * * * */
|
/* * * * */
|
||||||
|
|
||||||
|
@ -94,7 +95,7 @@ icons) into a single `<header>` element.
|
||||||
export default class StatusHeader extends React.PureComponent {
|
export default class StatusHeader extends React.PureComponent {
|
||||||
|
|
||||||
static propTypes = {
|
static propTypes = {
|
||||||
account: ImmutablePropTypes.map.isRequired,
|
status: ImmutablePropTypes.map.isRequired,
|
||||||
friend: ImmutablePropTypes.map,
|
friend: ImmutablePropTypes.map,
|
||||||
mediaIcon: PropTypes.string,
|
mediaIcon: PropTypes.string,
|
||||||
collapsible: PropTypes.bool,
|
collapsible: PropTypes.bool,
|
||||||
|
@ -102,7 +103,6 @@ export default class StatusHeader extends React.PureComponent {
|
||||||
parseClick: PropTypes.func.isRequired,
|
parseClick: PropTypes.func.isRequired,
|
||||||
setExpansion: PropTypes.func.isRequired,
|
setExpansion: PropTypes.func.isRequired,
|
||||||
intl: PropTypes.object.isRequired,
|
intl: PropTypes.object.isRequired,
|
||||||
visibility: PropTypes.string,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -135,8 +135,8 @@ status.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
handleAccountClick = (e) => {
|
handleAccountClick = (e) => {
|
||||||
const { account, parseClick } = this.props;
|
const { status, parseClick } = this.props;
|
||||||
parseClick(e, `/accounts/${+account.get('id')}`);
|
parseClick(e, `/accounts/${+status.getIn(['account', 'id'])}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -150,21 +150,15 @@ has a very straightforward rendering process.
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
const {
|
const {
|
||||||
account,
|
status,
|
||||||
friend,
|
friend,
|
||||||
mediaIcon,
|
mediaIcon,
|
||||||
collapsible,
|
collapsible,
|
||||||
collapsed,
|
collapsed,
|
||||||
intl,
|
intl,
|
||||||
visibility,
|
|
||||||
} = this.props;
|
} = this.props;
|
||||||
|
|
||||||
const visibilityClass = {
|
const account = status.get('account');
|
||||||
public: 'globe',
|
|
||||||
unlisted: 'unlock-alt',
|
|
||||||
private: 'lock',
|
|
||||||
direct: 'envelope',
|
|
||||||
}[visibility];
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<header className='status__info'>
|
<header className='status__info'>
|
||||||
|
@ -186,11 +180,7 @@ it is rendered as a float.
|
||||||
/>
|
/>
|
||||||
) : null}
|
) : null}
|
||||||
{(
|
{(
|
||||||
<i
|
<VisibilityIcon visibility={status.get('visibility')} />
|
||||||
className={`status__visibility-icon fa fa-fw fa-${visibilityClass}`}
|
|
||||||
title={intl.formatMessage(messages[visibility])}
|
|
||||||
aria-hidden='true'
|
|
||||||
/>
|
|
||||||
)}
|
)}
|
||||||
{collapsible ? (
|
{collapsible ? (
|
||||||
<IconButton
|
<IconButton
|
||||||
|
|
|
@ -704,10 +704,9 @@ collapsed.
|
||||||
/>
|
/>
|
||||||
) : null}
|
) : null}
|
||||||
<StatusHeader
|
<StatusHeader
|
||||||
account={status.get('account')}
|
status={status}
|
||||||
friend={account}
|
friend={account}
|
||||||
mediaIcon={mediaIcon}
|
mediaIcon={mediaIcon}
|
||||||
visibility={status.get('visibility')}
|
|
||||||
collapsible={settings.getIn(['collapsed', 'enabled'])}
|
collapsible={settings.getIn(['collapsed', 'enabled'])}
|
||||||
collapsed={isExpanded === false}
|
collapsed={isExpanded === false}
|
||||||
parseClick={parseClick}
|
parseClick={parseClick}
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
// Package imports //
|
||||||
|
import React from 'react';
|
||||||
|
import PropTypes from 'prop-types';
|
||||||
|
import { defineMessages, injectIntl } from 'react-intl';
|
||||||
|
import ImmutablePureComponent from 'react-immutable-pure-component';
|
||||||
|
|
||||||
|
const messages = defineMessages({
|
||||||
|
public: { id: 'privacy.public.short', defaultMessage: 'Public' },
|
||||||
|
unlisted: { id: 'privacy.unlisted.short', defaultMessage: 'Unlisted' },
|
||||||
|
private: { id: 'privacy.private.short', defaultMessage: 'Followers-only' },
|
||||||
|
direct: { id: 'privacy.direct.short', defaultMessage: 'Direct' },
|
||||||
|
});
|
||||||
|
|
||||||
|
@injectIntl
|
||||||
|
export default class VisibilityIcon extends ImmutablePureComponent {
|
||||||
|
|
||||||
|
static propTypes = {
|
||||||
|
visibility: PropTypes.string,
|
||||||
|
intl: PropTypes.object.isRequired,
|
||||||
|
withLabel: PropTypes.bool,
|
||||||
|
};
|
||||||
|
|
||||||
|
render() {
|
||||||
|
const { withLabel, visibility, intl } = this.props;
|
||||||
|
|
||||||
|
const visibilityClass = {
|
||||||
|
public: 'globe',
|
||||||
|
unlisted: 'unlock-alt',
|
||||||
|
private: 'lock',
|
||||||
|
direct: 'envelope',
|
||||||
|
}[visibility];
|
||||||
|
|
||||||
|
const label = intl.formatMessage(messages[visibility]);
|
||||||
|
|
||||||
|
const icon = (<i
|
||||||
|
className={`status__visibility-icon fa fa-fw fa-${visibilityClass}`}
|
||||||
|
title={label}
|
||||||
|
aria-hidden='true'
|
||||||
|
/>);
|
||||||
|
|
||||||
|
if (withLabel) {
|
||||||
|
return (<span style={{ whiteSpace: 'nowrap' }}>{icon} {label}</span>);
|
||||||
|
} else {
|
||||||
|
return icon;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -72,8 +72,8 @@ export default class ActionBar extends React.PureComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
let reblogIcon = 'retweet';
|
let reblogIcon = 'retweet';
|
||||||
if (status.get('visibility') === 'direct') reblogIcon = 'envelope';
|
//if (status.get('visibility') === 'direct') reblogIcon = 'envelope';
|
||||||
else if (status.get('visibility') === 'private') reblogIcon = 'lock';
|
// else if (status.get('visibility') === 'private') reblogIcon = 'lock';
|
||||||
|
|
||||||
let reblog_disabled = (status.get('visibility') === 'direct' || status.get('visibility') === 'private');
|
let reblog_disabled = (status.get('visibility') === 'direct' || status.get('visibility') === 'private');
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@ import Link from 'react-router-dom/Link';
|
||||||
import { FormattedDate, FormattedNumber } from 'react-intl';
|
import { FormattedDate, FormattedNumber } from 'react-intl';
|
||||||
import CardContainer from '../containers/card_container';
|
import CardContainer from '../containers/card_container';
|
||||||
import ImmutablePureComponent from 'react-immutable-pure-component';
|
import ImmutablePureComponent from 'react-immutable-pure-component';
|
||||||
|
import VisibilityIcon from '../../../../glitch/components/status/visibility_icon';
|
||||||
|
|
||||||
export default class DetailedStatus extends ImmutablePureComponent {
|
export default class DetailedStatus extends ImmutablePureComponent {
|
||||||
|
|
||||||
|
@ -103,7 +104,7 @@ export default class DetailedStatus extends ImmutablePureComponent {
|
||||||
<span className='detailed-status__favorites'>
|
<span className='detailed-status__favorites'>
|
||||||
<FormattedNumber value={status.get('favourites_count')} />
|
<FormattedNumber value={status.get('favourites_count')} />
|
||||||
</span>
|
</span>
|
||||||
</Link>
|
</Link> · <VisibilityIcon visibility={status.get('visibility')} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
|
@ -836,10 +836,10 @@
|
||||||
position: relative;
|
position: relative;
|
||||||
float: right;
|
float: right;
|
||||||
color: lighten($ui-base-color, 26%);
|
color: lighten($ui-base-color, 26%);
|
||||||
}
|
|
||||||
|
|
||||||
.status__visibility-icon {
|
.status__visibility-icon {
|
||||||
padding-left: 6px;
|
padding-left: 6px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.status-check-box {
|
.status-check-box {
|
||||||
|
|
Loading…
Reference in New Issue