kopia lustrzana https://gitlab.com/soapbox-pub/soapbox
SoapboxConfig: allow authenticated profiles to be configured
rodzic
a48e7f28b0
commit
196284695b
|
@ -471,8 +471,6 @@ export function unsubscribeAccountFail(error) {
|
||||||
|
|
||||||
export function fetchFollowers(id) {
|
export function fetchFollowers(id) {
|
||||||
return (dispatch, getState) => {
|
return (dispatch, getState) => {
|
||||||
if (!isLoggedIn(getState)) return;
|
|
||||||
|
|
||||||
dispatch(fetchFollowersRequest(id));
|
dispatch(fetchFollowersRequest(id));
|
||||||
|
|
||||||
api(getState).get(`/api/v1/accounts/${id}/followers`).then(response => {
|
api(getState).get(`/api/v1/accounts/${id}/followers`).then(response => {
|
||||||
|
@ -561,8 +559,6 @@ export function expandFollowersFail(id, error) {
|
||||||
|
|
||||||
export function fetchFollowing(id) {
|
export function fetchFollowing(id) {
|
||||||
return (dispatch, getState) => {
|
return (dispatch, getState) => {
|
||||||
if (!isLoggedIn(getState)) return;
|
|
||||||
|
|
||||||
dispatch(fetchFollowingRequest(id));
|
dispatch(fetchFollowingRequest(id));
|
||||||
|
|
||||||
api(getState).get(`/api/v1/accounts/${id}/following`).then(response => {
|
api(getState).get(`/api/v1/accounts/${id}/following`).then(response => {
|
||||||
|
|
|
@ -50,6 +50,7 @@ export const makeDefaultConfig = features => {
|
||||||
limit: 1,
|
limit: 1,
|
||||||
}),
|
}),
|
||||||
aboutPages: ImmutableMap(),
|
aboutPages: ImmutableMap(),
|
||||||
|
authenticatedProfile: true,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@ import MissingIndicator from 'soapbox/components/missing_indicator';
|
||||||
const mapStateToProps = (state, { params }) => {
|
const mapStateToProps = (state, { params }) => {
|
||||||
const username = params.username || '';
|
const username = params.username || '';
|
||||||
const me = state.get('me');
|
const me = state.get('me');
|
||||||
const meUsername = state.getIn(['accounts', me, 'username']);
|
const meUsername = state.getIn(['accounts', me, 'username'], '');
|
||||||
return {
|
return {
|
||||||
isMyAccount: (username.toLowerCase() === meUsername.toLowerCase()),
|
isMyAccount: (username.toLowerCase() === meUsername.toLowerCase()),
|
||||||
statusIds: state.getIn(['status_lists', 'favourites', 'items']),
|
statusIds: state.getIn(['status_lists', 'favourites', 'items']),
|
||||||
|
|
|
@ -12,7 +12,7 @@ import MissingIndicator from 'soapbox/components/missing_indicator';
|
||||||
const mapStateToProps = (state, { params }) => {
|
const mapStateToProps = (state, { params }) => {
|
||||||
const username = params.username || '';
|
const username = params.username || '';
|
||||||
const me = state.get('me');
|
const me = state.get('me');
|
||||||
const meUsername = state.getIn(['accounts', me, 'username']);
|
const meUsername = state.getIn(['accounts', me, 'username'], '');
|
||||||
return {
|
return {
|
||||||
isMyAccount: (username.toLowerCase() === meUsername.toLowerCase()),
|
isMyAccount: (username.toLowerCase() === meUsername.toLowerCase()),
|
||||||
statusIds: state.getIn(['status_lists', 'pins', 'items']),
|
statusIds: state.getIn(['status_lists', 'pins', 'items']),
|
||||||
|
|
|
@ -51,6 +51,8 @@ const messages = defineMessages({
|
||||||
displayFqnLabel: { id: 'soapbox_config.display_fqn_label', defaultMessage: 'Display domain (eg @user@domain) for local accounts.' },
|
displayFqnLabel: { id: 'soapbox_config.display_fqn_label', defaultMessage: 'Display domain (eg @user@domain) for local accounts.' },
|
||||||
greentextLabel: { id: 'soapbox_config.greentext_label', defaultMessage: 'Enable greentext support' },
|
greentextLabel: { id: 'soapbox_config.greentext_label', defaultMessage: 'Enable greentext support' },
|
||||||
promoPanelIconsLink: { id: 'soapbox_config.hints.promo_panel_icons.link', defaultMessage: 'Soapbox Icons List' },
|
promoPanelIconsLink: { id: 'soapbox_config.hints.promo_panel_icons.link', defaultMessage: 'Soapbox Icons List' },
|
||||||
|
authenticatedProfileLabel: { id: 'soapbox_config.authenticated_profile_label', defaultMessage: 'Profiles require authentication' },
|
||||||
|
authenticatedProfileHint: { id: 'soapbox_config.authenticated_profile_hint', defaultMessage: 'Users must be logged-in to view replies and media on user profiles.' },
|
||||||
});
|
});
|
||||||
|
|
||||||
const listenerOptions = supportsPassiveEvents ? { passive: true } : false;
|
const listenerOptions = supportsPassiveEvents ? { passive: true } : false;
|
||||||
|
@ -279,6 +281,13 @@ class SoapboxConfig extends ImmutablePureComponent {
|
||||||
checked={soapbox.get('greentext') === true}
|
checked={soapbox.get('greentext') === true}
|
||||||
onChange={this.handleChange(['greentext'], (e) => e.target.checked)}
|
onChange={this.handleChange(['greentext'], (e) => e.target.checked)}
|
||||||
/>
|
/>
|
||||||
|
<Checkbox
|
||||||
|
name='authenticatedProfile'
|
||||||
|
label={intl.formatMessage(messages.authenticatedProfileLabel)}
|
||||||
|
hint={intl.formatMessage(messages.authenticatedProfileHint)}
|
||||||
|
checked={soapbox.get('authenticatedProfile') === true}
|
||||||
|
onChange={this.handleChange(['authenticatedProfile'], (e) => e.target.checked)}
|
||||||
|
/>
|
||||||
</FieldsGroup>
|
</FieldsGroup>
|
||||||
<FieldsGroup>
|
<FieldsGroup>
|
||||||
<div className='input with_block_label popup'>
|
<div className='input with_block_label popup'>
|
||||||
|
|
|
@ -7,6 +7,7 @@ import { defineMessages, injectIntl } from 'react-intl';
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
import { Switch, withRouter } from 'react-router-dom';
|
import { Switch, withRouter } from 'react-router-dom';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
|
import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||||
import SoapboxPropTypes from 'soapbox/utils/soapbox_prop_types';
|
import SoapboxPropTypes from 'soapbox/utils/soapbox_prop_types';
|
||||||
import NotificationsContainer from './containers/notifications_container';
|
import NotificationsContainer from './containers/notifications_container';
|
||||||
import LoadingBarContainer from './containers/loading_bar_container';
|
import LoadingBarContainer from './containers/loading_bar_container';
|
||||||
|
@ -44,6 +45,7 @@ import ProfileHoverCard from 'soapbox/components/profile_hover_card';
|
||||||
import { getAccessToken } from 'soapbox/utils/auth';
|
import { getAccessToken } from 'soapbox/utils/auth';
|
||||||
import { getFeatures } from 'soapbox/utils/features';
|
import { getFeatures } from 'soapbox/utils/features';
|
||||||
import { fetchCustomEmojis } from 'soapbox/actions/custom_emojis';
|
import { fetchCustomEmojis } from 'soapbox/actions/custom_emojis';
|
||||||
|
import { getSoapboxConfig } from 'soapbox/actions/soapbox';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
Status,
|
Status,
|
||||||
|
@ -121,6 +123,7 @@ const mapStateToProps = state => {
|
||||||
const me = state.get('me');
|
const me = state.get('me');
|
||||||
const account = state.getIn(['accounts', me]);
|
const account = state.getIn(['accounts', me]);
|
||||||
const instance = state.get('instance');
|
const instance = state.get('instance');
|
||||||
|
const soapbox = getSoapboxConfig(state);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
dropdownMenuIsOpen: state.getIn(['dropdown_menu', 'openId']) !== null,
|
dropdownMenuIsOpen: state.getIn(['dropdown_menu', 'openId']) !== null,
|
||||||
|
@ -129,6 +132,7 @@ const mapStateToProps = state => {
|
||||||
me,
|
me,
|
||||||
account,
|
account,
|
||||||
features: getFeatures(instance),
|
features: getFeatures(instance),
|
||||||
|
soapbox,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -166,6 +170,7 @@ class SwitchingColumnsArea extends React.PureComponent {
|
||||||
children: PropTypes.node,
|
children: PropTypes.node,
|
||||||
location: PropTypes.object,
|
location: PropTypes.object,
|
||||||
onLayoutChange: PropTypes.func.isRequired,
|
onLayoutChange: PropTypes.func.isRequired,
|
||||||
|
soapbox: ImmutablePropTypes.map.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
state = {
|
state = {
|
||||||
|
@ -194,7 +199,8 @@ class SwitchingColumnsArea extends React.PureComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { children } = this.props;
|
const { children, soapbox } = this.props;
|
||||||
|
const authenticatedProfile = soapbox.get('authenticatedProfile');
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Switch>
|
<Switch>
|
||||||
|
@ -254,10 +260,10 @@ class SwitchingColumnsArea extends React.PureComponent {
|
||||||
<WrappedRoute path='/mutes' page={DefaultPage} component={Mutes} content={children} />
|
<WrappedRoute path='/mutes' page={DefaultPage} component={Mutes} content={children} />
|
||||||
<WrappedRoute path='/filters' page={DefaultPage} component={Filters} content={children} />
|
<WrappedRoute path='/filters' page={DefaultPage} component={Filters} content={children} />
|
||||||
<WrappedRoute path='/@:username' publicRoute exact component={AccountTimeline} page={ProfilePage} content={children} />
|
<WrappedRoute path='/@:username' publicRoute exact component={AccountTimeline} page={ProfilePage} content={children} />
|
||||||
<WrappedRoute path='/@:username/with_replies' component={AccountTimeline} page={ProfilePage} content={children} componentParams={{ withReplies: true }} />
|
<WrappedRoute path='/@:username/with_replies' publicRoute={!authenticatedProfile} component={AccountTimeline} page={ProfilePage} content={children} componentParams={{ withReplies: true }} />
|
||||||
<WrappedRoute path='/@:username/followers' component={Followers} page={ProfilePage} content={children} />
|
<WrappedRoute path='/@:username/followers' publicRoute={!authenticatedProfile} component={Followers} page={ProfilePage} content={children} />
|
||||||
<WrappedRoute path='/@:username/following' component={Following} page={ProfilePage} content={children} />
|
<WrappedRoute path='/@:username/following' publicRoute={!authenticatedProfile} component={Following} page={ProfilePage} content={children} />
|
||||||
<WrappedRoute path='/@:username/media' component={AccountGallery} page={ProfilePage} content={children} />
|
<WrappedRoute path='/@:username/media' publicRoute={!authenticatedProfile} component={AccountGallery} page={ProfilePage} content={children} />
|
||||||
<WrappedRoute path='/@:username/tagged/:tag' exact component={AccountTimeline} page={ProfilePage} content={children} />
|
<WrappedRoute path='/@:username/tagged/:tag' exact component={AccountTimeline} page={ProfilePage} content={children} />
|
||||||
<WrappedRoute path='/@:username/favorites' component={FavouritedStatuses} page={ProfilePage} content={children} />
|
<WrappedRoute path='/@:username/favorites' component={FavouritedStatuses} page={ProfilePage} content={children} />
|
||||||
<WrappedRoute path='/@:username/pins' component={PinnedStatuses} page={ProfilePage} content={children} />
|
<WrappedRoute path='/@:username/pins' component={PinnedStatuses} page={ProfilePage} content={children} />
|
||||||
|
@ -314,6 +320,7 @@ class UI extends React.PureComponent {
|
||||||
streamingUrl: PropTypes.string,
|
streamingUrl: PropTypes.string,
|
||||||
account: PropTypes.object,
|
account: PropTypes.object,
|
||||||
features: PropTypes.object.isRequired,
|
features: PropTypes.object.isRequired,
|
||||||
|
soapbox: ImmutablePropTypes.map.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
state = {
|
state = {
|
||||||
|
@ -594,7 +601,7 @@ class UI extends React.PureComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { streamingUrl, features } = this.props;
|
const { streamingUrl, features, soapbox } = this.props;
|
||||||
const { draggingOver, mobile } = this.state;
|
const { draggingOver, mobile } = this.state;
|
||||||
const { intl, children, location, dropdownMenuIsOpen, me } = this.props;
|
const { intl, children, location, dropdownMenuIsOpen, me } = this.props;
|
||||||
|
|
||||||
|
@ -644,7 +651,7 @@ class UI extends React.PureComponent {
|
||||||
<HotKeys keyMap={keyMap} handlers={handlers} ref={this.setHotkeysRef} attach={window} focused>
|
<HotKeys keyMap={keyMap} handlers={handlers} ref={this.setHotkeysRef} attach={window} focused>
|
||||||
<div className={classnames} ref={this.setRef} style={style}>
|
<div className={classnames} ref={this.setRef} style={style}>
|
||||||
<TabsBar />
|
<TabsBar />
|
||||||
<SwitchingColumnsArea location={location} onLayoutChange={this.handleLayoutChange}>
|
<SwitchingColumnsArea location={location} onLayoutChange={this.handleLayoutChange} soapbox={soapbox}>
|
||||||
{children}
|
{children}
|
||||||
</SwitchingColumnsArea>
|
</SwitchingColumnsArea>
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue