Change visibility to visibility_ex

This commit is contained in:
KMY 2023-04-06 20:28:05 +09:00
parent b18268a0a0
commit 7d76d01795
11 changed files with 31 additions and 25 deletions

View file

@ -7,7 +7,7 @@ export function initBoostModal(props) {
return (dispatch, getState) => { return (dispatch, getState) => {
const default_privacy = getState().getIn(['compose', 'default_privacy']); const default_privacy = getState().getIn(['compose', 'default_privacy']);
const privacy = props.status.get('visibility') === 'private' ? 'private' : default_privacy; const privacy = props.status.get('visibility_ex') === 'private' ? 'private' : default_privacy;
dispatch({ dispatch({
type: BOOSTS_INIT_MODAL, type: BOOSTS_INIT_MODAL,

View file

@ -222,11 +222,11 @@ export function submitCompose(routerHistory) {
dispatch(importFetchedStatus({ ...response.data })); dispatch(importFetchedStatus({ ...response.data }));
} }
if (statusId === null && response.data.visibility !== 'direct') { if (statusId === null && response.data.visibility_ex !== 'direct') {
insertIfOnline('home'); insertIfOnline('home');
} }
if (statusId === null && response.data.in_reply_to_id === null && response.data.visibility === 'public') { if (statusId === null && response.data.in_reply_to_id === null && response.data.visibility_ex === 'public') {
insertIfOnline('community'); insertIfOnline('community');
insertIfOnline('public'); insertIfOnline('public');
insertIfOnline(`account:${response.data.account.id}`); insertIfOnline(`account:${response.data.account.id}`);

View file

@ -512,7 +512,7 @@ class Status extends ImmutablePureComponent {
'direct': { icon: 'at', text: intl.formatMessage(messages.direct_short) }, 'direct': { icon: 'at', text: intl.formatMessage(messages.direct_short) },
}; };
const visibilityIcon = visibilityIconInfo[status.get('visibility')]; const visibilityIcon = visibilityIconInfo[status.get('visibility_ex')];
let emojiReactionsBar = null; let emojiReactionsBar = null;
if (!this.props.withoutEmojiReactions && status.get('emoji_reactions')) { if (!this.props.withoutEmojiReactions && status.get('emoji_reactions')) {
@ -524,10 +524,10 @@ class Status extends ImmutablePureComponent {
return ( return (
<HotKeys handlers={handlers}> <HotKeys handlers={handlers}>
<div className={classNames('status__wrapper', `status__wrapper-${status.get('visibility')}`, { 'status__wrapper-reply': !!status.get('in_reply_to_id'), unread, focusable: !this.props.muted })} tabIndex={this.props.muted ? null : 0} data-featured={featured ? 'true' : null} aria-label={textForScreenReader(intl, status, rebloggedByText)} ref={this.handleRef}> <div className={classNames('status__wrapper', `status__wrapper-${status.get('visibility_ex')}`, { 'status__wrapper-reply': !!status.get('in_reply_to_id'), unread, focusable: !this.props.muted })} tabIndex={this.props.muted ? null : 0} data-featured={featured ? 'true' : null} aria-label={textForScreenReader(intl, status, rebloggedByText)} ref={this.handleRef}>
{prepend} {prepend}
<div className={classNames('status', `status-${status.get('visibility')}`, { 'status-reply': !!status.get('in_reply_to_id'), muted: this.props.muted })} data-id={status.get('id')}> <div className={classNames('status', `status-${status.get('visibility_ex')}`, { 'status-reply': !!status.get('in_reply_to_id'), muted: this.props.muted })} data-id={status.get('id')}>
<div onClick={this.handleClick} className='status__info'> <div onClick={this.handleClick} className='status__info'>
<a href={`/@${status.getIn(['account', 'acct'])}/${status.get('id')}`} className='status__relative-time' target='_blank' rel='noopener noreferrer'> <a href={`/@${status.getIn(['account', 'acct'])}/${status.get('id')}`} className='status__relative-time' target='_blank' rel='noopener noreferrer'>
<span className='status__visibility-icon'><Icon id={visibilityIcon.icon} title={visibilityIcon.text} /></span> <span className='status__visibility-icon'><Icon id={visibilityIcon.icon} title={visibilityIcon.text} /></span>

View file

@ -251,8 +251,8 @@ class StatusActionBar extends ImmutablePureComponent {
const { signedIn, permissions } = this.context.identity; const { signedIn, permissions } = this.context.identity;
const anonymousAccess = !signedIn; const anonymousAccess = !signedIn;
const publicStatus = ['public', 'unlisted', 'public_unlisted'].includes(status.get('visibility')); const publicStatus = ['public', 'unlisted', 'public_unlisted'].includes(status.get('visibility_ex'));
const pinnableStatus = ['public', 'unlisted', 'public_unlisted', 'private'].includes(status.get('visibility')); const pinnableStatus = ['public', 'unlisted', 'public_unlisted', 'private'].includes(status.get('visibility_ex'));
const mutingConversation = status.get('muted'); const mutingConversation = status.get('muted');
const account = status.get('account'); const account = status.get('account');
const writtenByMe = status.getIn(['account', 'id']) === me; const writtenByMe = status.getIn(['account', 'id']) === me;
@ -351,7 +351,7 @@ class StatusActionBar extends ImmutablePureComponent {
replyTitle = intl.formatMessage(messages.replyAll); replyTitle = intl.formatMessage(messages.replyAll);
} }
const reblogPrivate = status.getIn(['account', 'id']) === me && status.get('visibility') === 'private'; const reblogPrivate = status.getIn(['account', 'id']) === me && status.get('visibility_ex') === 'private';
let reblogTitle = ''; let reblogTitle = '';
if (status.get('reblogged')) { if (status.get('reblogged')) {

View file

@ -154,8 +154,8 @@ class Footer extends ImmutablePureComponent {
render () { render () {
const { status, intl, withOpenButton } = this.props; const { status, intl, withOpenButton } = this.props;
const publicStatus = ['public', 'unlisted', 'public_unlisted'].includes(status.get('visibility')); const publicStatus = ['public', 'unlisted', 'public_unlisted'].includes(status.get('visibility_ex'));
const reblogPrivate = status.getIn(['account', 'id']) === me && status.get('visibility') === 'private'; const reblogPrivate = status.getIn(['account', 'id']) === me && status.get('visibility_ex') === 'private';
let replyIcon, replyTitle; let replyIcon, replyTitle;

View file

@ -49,7 +49,7 @@ class StatusCheckBox extends React.PureComponent {
'direct': { icon: 'at', text: intl.formatMessage(messages.direct_short) }, 'direct': { icon: 'at', text: intl.formatMessage(messages.direct_short) },
}; };
const visibilityIcon = visibilityIconInfo[status.get('visibility')]; const visibilityIcon = visibilityIconInfo[status.get('visibility_ex')];
const labelComponent = ( const labelComponent = (
<div className='status-check-box__status poll__option__text'> <div className='status-check-box__status poll__option__text'>

View file

@ -192,8 +192,8 @@ class ActionBar extends React.PureComponent {
const { status, relationship, intl } = this.props; const { status, relationship, intl } = this.props;
const { signedIn, permissions } = this.context.identity; const { signedIn, permissions } = this.context.identity;
const publicStatus = ['public', 'unlisted', 'public_unlisted'].includes(status.get('visibility')); const publicStatus = ['public', 'unlisted', 'public_unlisted'].includes(status.get('visibility_ex'));
const pinnableStatus = ['public', 'unlisted', 'public_unlisted', 'private'].includes(status.get('visibility')); const pinnableStatus = ['public', 'unlisted', 'public_unlisted', 'private'].includes(status.get('visibility_ex'));
const mutingConversation = status.get('muted'); const mutingConversation = status.get('muted');
const account = status.get('account'); const account = status.get('account');
const writtenByMe = status.getIn(['account', 'id']) === me; const writtenByMe = status.getIn(['account', 'id']) === me;
@ -280,7 +280,7 @@ class ActionBar extends React.PureComponent {
replyIcon = 'reply-all'; replyIcon = 'reply-all';
} }
const reblogPrivate = status.getIn(['account', 'id']) === me && status.get('visibility') === 'private'; const reblogPrivate = status.getIn(['account', 'id']) === me && status.get('visibility_ex') === 'private';
let reblogTitle; let reblogTitle;
if (status.get('reblogged')) { if (status.get('reblogged')) {

View file

@ -219,7 +219,7 @@ class DetailedStatus extends ImmutablePureComponent {
'direct': { icon: 'at', text: intl.formatMessage(messages.direct_short) }, 'direct': { icon: 'at', text: intl.formatMessage(messages.direct_short) },
}; };
const visibilityIcon = visibilityIconInfo[status.get('visibility')]; const visibilityIcon = visibilityIconInfo[status.get('visibility_ex')];
const visibilityLink = <React.Fragment> · <Icon id={visibilityIcon.icon} title={visibilityIcon.text} /></React.Fragment>; const visibilityLink = <React.Fragment> · <Icon id={visibilityIcon.icon} title={visibilityIcon.text} /></React.Fragment>;
const searchabilityIconInfo = { const searchabilityIconInfo = {
@ -232,7 +232,7 @@ class DetailedStatus extends ImmutablePureComponent {
const searchabilityIcon = searchabilityIconInfo[status.get('searchability')]; const searchabilityIcon = searchabilityIconInfo[status.get('searchability')];
const searchabilityLink = <React.Fragment> · <Icon id={searchabilityIcon.icon} title={searchabilityIcon.text} /></React.Fragment>; const searchabilityLink = <React.Fragment> · <Icon id={searchabilityIcon.icon} title={searchabilityIcon.text} /></React.Fragment>;
if (['private', 'direct'].includes(status.get('visibility'))) { if (['private', 'direct'].includes(status.get('visibility_ex'))) {
reblogLink = ''; reblogLink = '';
} else if (this.context.router) { } else if (this.context.router) {
reblogLink = ( reblogLink = (
@ -307,7 +307,7 @@ class DetailedStatus extends ImmutablePureComponent {
return ( return (
<div style={outerStyle}> <div style={outerStyle}>
<div ref={this.setRef} className={classNames('detailed-status', `detailed-status-${status.get('visibility')}`, { compact })}> <div ref={this.setRef} className={classNames('detailed-status', `detailed-status-${status.get('visibility_ex')}`, { compact })}>
<a href={`/@${status.getIn(['account', 'acct'])}`} onClick={this.handleAccountClick} className='detailed-status__display-name'> <a href={`/@${status.getIn(['account', 'acct'])}`} onClick={this.handleAccountClick} className='detailed-status__display-name'>
<div className='detailed-status__display-avatar'><Avatar account={status.get('account')} size={46} /></div> <div className='detailed-status__display-avatar'><Avatar account={status.get('account')} size={46} /></div>
<DisplayName account={status.get('account')} localDomain={this.props.domain} /> <DisplayName account={status.get('account')} localDomain={this.props.domain} />

View file

@ -93,12 +93,12 @@ class BoostModal extends ImmutablePureComponent {
'direct': { icon: 'at', text: intl.formatMessage(messages.direct_short) }, 'direct': { icon: 'at', text: intl.formatMessage(messages.direct_short) },
}; };
const visibilityIcon = visibilityIconInfo[status.get('visibility')]; const visibilityIcon = visibilityIconInfo[status.get('visibility_ex')];
return ( return (
<div className='modal-root__modal boost-modal'> <div className='modal-root__modal boost-modal'>
<div className='boost-modal__container'> <div className='boost-modal__container'>
<div className={classNames('status', `status-${status.get('visibility')}`, 'light')}> <div className={classNames('status', `status-${status.get('visibility_ex')}`, 'light')}>
<div className='status__info'> <div className='status__info'>
<a href={`/@${status.getIn(['account', 'acct'])}/${status.get('id')}`} className='status__relative-time' target='_blank' rel='noopener noreferrer'> <a href={`/@${status.getIn(['account', 'acct'])}/${status.get('id')}`} className='status__relative-time' target='_blank' rel='noopener noreferrer'>
<span className='status__visibility-icon'><Icon id={visibilityIcon.icon} title={visibilityIcon.text} /></span> <span className='status__visibility-icon'><Icon id={visibilityIcon.icon} title={visibilityIcon.text} /></span>
@ -127,7 +127,7 @@ class BoostModal extends ImmutablePureComponent {
<div className='boost-modal__action-bar'> <div className='boost-modal__action-bar'>
<div><FormattedMessage id='boost_modal.combo' defaultMessage='You can press {combo} to skip this next time' values={{ combo: <span>Shift + <Icon id='retweet' /></span> }} /></div> <div><FormattedMessage id='boost_modal.combo' defaultMessage='You can press {combo} to skip this next time' values={{ combo: <span>Shift + <Icon id='retweet' /></span> }} /></div>
{status.get('visibility') !== 'private' && !status.get('reblogged') && ( {status.get('visibility_ex') !== 'private' && !status.get('reblogged') && (
<PrivacyDropdown <PrivacyDropdown
noDirect noDirect
value={privacy} value={privacy}

View file

@ -347,7 +347,7 @@ export default function compose(state = initialState, action) {
map.set('id', null); map.set('id', null);
map.set('in_reply_to', action.status.get('id')); map.set('in_reply_to', action.status.get('id'));
map.set('text', statusToTextMentions(state, action.status)); map.set('text', statusToTextMentions(state, action.status));
map.set('privacy', privacyPreference(action.status.get('visibility'), state.get('default_privacy'))); map.set('privacy', privacyPreference(action.status.get('visibility_ex'), state.get('default_privacy')));
map.set('searchability', privacyPreference(action.status.get('searchability'), state.get('default_searchability'))) map.set('searchability', privacyPreference(action.status.get('searchability'), state.get('default_searchability')))
map.set('focusDate', new Date()); map.set('focusDate', new Date());
map.set('caretPosition', null); map.set('caretPosition', null);
@ -481,7 +481,7 @@ export default function compose(state = initialState, action) {
return state.withMutations(map => { return state.withMutations(map => {
map.set('text', action.raw_text || unescapeHTML(expandMentions(action.status))); map.set('text', action.raw_text || unescapeHTML(expandMentions(action.status)));
map.set('in_reply_to', action.status.get('in_reply_to_id')); map.set('in_reply_to', action.status.get('in_reply_to_id'));
map.set('privacy', action.status.get('visibility')); map.set('privacy', action.status.get('visibility_ex'));
map.set('media_attachments', action.status.get('media_attachments').map((media) => media.set('unattached', true))); map.set('media_attachments', action.status.get('media_attachments').map((media) => media.set('unattached', true)));
map.set('focusDate', new Date()); map.set('focusDate', new Date());
map.set('caretPosition', null); map.set('caretPosition', null);
@ -511,7 +511,7 @@ export default function compose(state = initialState, action) {
map.set('id', action.status.get('id')); map.set('id', action.status.get('id'));
map.set('text', action.text); map.set('text', action.text);
map.set('in_reply_to', action.status.get('in_reply_to_id')); map.set('in_reply_to', action.status.get('in_reply_to_id'));
map.set('privacy', action.status.get('visibility')); map.set('privacy', action.status.get('visibility_ex'));
map.set('media_attachments', action.status.get('media_attachments')); map.set('media_attachments', action.status.get('media_attachments'));
map.set('focusDate', new Date()); map.set('focusDate', new Date());
map.set('caretPosition', null); map.set('caretPosition', null);

View file

@ -4,7 +4,7 @@ class REST::StatusSerializer < ActiveModel::Serializer
include FormattingHelper include FormattingHelper
attributes :id, :created_at, :in_reply_to_id, :in_reply_to_account_id, attributes :id, :created_at, :in_reply_to_id, :in_reply_to_account_id,
:sensitive, :spoiler_text, :visibility, :language, :translatable, :sensitive, :spoiler_text, :visibility, :visibility_ex, :language, :translatable,
:uri, :url, :replies_count, :reblogs_count, :searchability, :uri, :url, :replies_count, :reblogs_count, :searchability,
:favourites_count, :emoji_reactions, :edited_at :favourites_count, :emoji_reactions, :edited_at
@ -60,11 +60,17 @@ class REST::StatusSerializer < ActiveModel::Serializer
# UX differences # UX differences
if object.limited_visibility? if object.limited_visibility?
'private' 'private'
elsif object.public_unlisted_visibility?
'public'
else else
object.visibility object.visibility
end end
end end
def visibility_ex
object.visibility
end
def searchability def searchability
object.compute_searchability object.compute_searchability
end end