Resolve linter issues

This commit is contained in:
Chi Vinh Le committed 2018-06-05 04:28:54 +02:00
1 parent d9a1d739dc
commit ccff6ed63b
148 files changed
+1171 -265

No files matched your search

+1 -2
View File
@@ -329,8 +329,7 @@ async function createSeedPlugin() {
if (answers.addPluginsJson) {
const pluginsJson = path.resolve(__dirname, '..', 'plugins.json');
fs
.readJson(pluginsJson)
fs.readJson(pluginsJson)
.then(j => {
// This is a client-side plugin, let's push this.
if (answers.client) {
+4 -1
View File
@@ -49,7 +49,10 @@ async function revokeToken(tokenID) {
async function createToken(userID, tokenName) {
try {
let { pat: { id }, jwt } = await TokensService.create(userID, tokenName);
let {
pat: { id },
jwt,
} = await TokensService.create(userID, tokenName);
console.log(`Created Token[${id}] for User[${userID}] = ${jwt}`);
@@ -19,7 +19,9 @@ class BanUserDialog extends React.Component {
}
handleMessageChange = e => {
const { target: { value: message } } = e;
const {
target: { value: message },
} = e;
this.setState({ message });
};
@@ -27,7 +27,9 @@ class KarmaTooltip extends React.Component {
};
render() {
const { thresholds: { unreliable } } = this.props;
const {
thresholds: { unreliable },
} = this.props;
const { menuVisible } = this.state;
return (
@@ -68,6 +70,7 @@ class KarmaTooltip extends React.Component {
className={styles.link}
href={t('user_detail.karma_docs_link')}
target="_blank"
rel="noopener noreferrer"
>
{t('user_detail.learn_more')}
</a>
@@ -159,7 +159,7 @@ class UserDetail extends React.Component {
} = this.props;
// if totalComments is 0, you're dividing by zero
let rejectedPercent = rejectedComments / totalComments * 100;
let rejectedPercent = (rejectedComments / totalComments) * 100;
if (rejectedPercent === Infinity || isNaN(rejectedPercent)) {
rejectedPercent = 0;
@@ -114,6 +114,7 @@ class UserDetailComment extends React.Component {
className={styles.external}
href={`${comment.asset.url}?commentId=${comment.id}`}
target="_blank"
rel="noopener noreferrer"
>
<Icon name="open_in_new" /> {t('comment.view_context')}
</a>
@@ -10,7 +10,10 @@ import ApproveButton from './ApproveButton';
const UserDetailCommentList = props => {
const {
root,
root: { user, comments: { nodes, hasNextPage } },
root: {
user,
comments: { nodes, hasNextPage },
},
acceptComment,
rejectComment,
selectedCommentIds,
@@ -77,7 +77,10 @@ const mapDispatchToProps = dispatch => ({
});
export default compose(
connect(mapStateToProps, mapDispatchToProps),
connect(
mapStateToProps,
mapDispatchToProps
),
withBanUser,
withSetCommentStatus
)(BanUserDialogContainer);
+4 -1
View File
@@ -81,4 +81,7 @@ const mapDispatchToProps = dispatch =>
dispatch
);
export default connect(mapStateToProps, mapDispatchToProps)(LayoutContainer);
export default connect(
mapStateToProps,
mapDispatchToProps
)(LayoutContainer);
@@ -83,7 +83,10 @@ const mapDispatchToProps = dispatch => ({
});
export default compose(
connect(mapStateToProps, mapDispatchToProps),
connect(
mapStateToProps,
mapDispatchToProps
),
withRejectUsername,
withPostFlag({ notifyOnError: false })
)(RejectUsernameDialogContainer);
+4 -1
View File
@@ -55,4 +55,7 @@ SignInContainer.propTypes = {
requireRecaptcha: PropTypes.bool.isRequired,
};
export default compose(withSignIn, withPopupAuthHandler)(SignInContainer);
export default compose(
withSignIn,
withPopupAuthHandler
)(SignInContainer);
@@ -86,7 +86,10 @@ const mapDispatchToProps = dispatch => ({
});
export default compose(
connect(mapStateToProps, mapDispatchToProps),
connect(
mapStateToProps,
mapDispatchToProps
),
withSuspendUser,
withSetCommentStatus,
withOrganizationName
@@ -294,7 +294,10 @@ const mapDispatchToProps = dispatch => ({
});
export default compose(
connect(mapStateToProps, mapDispatchToProps),
connect(
mapStateToProps,
mapDispatchToProps
),
withUserDetailQuery,
withSetCommentStatus,
withUnbanUser,
+20 -4
View File
@@ -66,7 +66,11 @@ export default {
});
},
}),
SuspendUser: ({ variables: { input: { id, until } } }) => ({
SuspendUser: ({
variables: {
input: { id, until },
},
}) => ({
update: proxy => {
const fragmentId = `User_${id}`;
@@ -92,7 +96,11 @@ export default {
});
},
}),
UnsuspendUser: ({ variables: { input: { id } } }) => ({
UnsuspendUser: ({
variables: {
input: { id },
},
}) => ({
update: proxy => {
const fragmentId = `User_${id}`;
const data = proxy.readFragment({
@@ -117,7 +125,11 @@ export default {
});
},
}),
BanUser: ({ variables: { input: { id } } }) => ({
BanUser: ({
variables: {
input: { id },
},
}) => ({
update: proxy => {
const fragmentId = `User_${id}`;
const data = proxy.readFragment({
@@ -142,7 +154,11 @@ export default {
});
},
}),
UnbanUser: ({ variables: { input: { id } } }) => ({
UnbanUser: ({
variables: {
input: { id },
},
}) => ({
update: proxy => {
const fragmentId = `User_${id}`;
const data = proxy.readFragment({
@@ -46,7 +46,11 @@ class FlaggedAccountsContainer extends Component {
document: USERNAME_FLAGGED_SUBSCRIPTION,
updateQuery: (
prev,
{ subscriptionData: { data: { usernameFlagged: user } } }
{
subscriptionData: {
data: { usernameFlagged: user },
},
}
) => {
return handleFlaggedAccountsChange(prev, user, () => {
const msg = t(
@@ -62,7 +66,11 @@ class FlaggedAccountsContainer extends Component {
document: USERNAME_APPROVED_SUBSCRIPTION,
updateQuery: (
prev,
{ subscriptionData: { data: { usernameApproved: user } } }
{
subscriptionData: {
data: { usernameApproved: user },
},
}
) => {
return handleFlaggedAccountsChange(prev, user, () => {
const msg = t(
@@ -78,7 +86,11 @@ class FlaggedAccountsContainer extends Component {
document: USERNAME_REJECTED_SUBSCRIPTION,
updateQuery: (
prev,
{ subscriptionData: { data: { usernameRejected: user } } }
{
subscriptionData: {
data: { usernameRejected: user },
},
}
) => {
return handleFlaggedAccountsChange(prev, user, () => {
const msg = t(
@@ -96,7 +108,9 @@ class FlaggedAccountsContainer extends Component {
prev,
{
subscriptionData: {
data: { usernameChanged: { previousUsername, user } },
data: {
usernameChanged: { previousUsername, user },
},
},
}
) => {
@@ -297,7 +311,10 @@ const mapDispatchToProps = dispatch =>
);
export default compose(
connect(null, mapDispatchToProps),
connect(
null,
mapDispatchToProps
),
withApproveUsername,
withQuery(
gql`
@@ -15,7 +15,11 @@ class IndicatorContainer extends Component {
document: USERNAME_FLAGGED_SUBSCRIPTION,
updateQuery: (
prev,
{ subscriptionData: { data: { usernameFlagged: user } } }
{
subscriptionData: {
data: { usernameFlagged: user },
},
}
) => {
return handleIndicatorChange(prev, user);
},
@@ -24,7 +28,11 @@ class IndicatorContainer extends Component {
document: USERNAME_APPROVED_SUBSCRIPTION,
updateQuery: (
prev,
{ subscriptionData: { data: { usernameApproved: user } } }
{
subscriptionData: {
data: { usernameApproved: user },
},
}
) => {
return handleIndicatorChange(prev, user);
},
@@ -33,7 +41,11 @@ class IndicatorContainer extends Component {
document: USERNAME_REJECTED_SUBSCRIPTION,
updateQuery: (
prev,
{ subscriptionData: { data: { usernameRejected: user } } }
{
subscriptionData: {
data: { usernameRejected: user },
},
}
) => {
return handleIndicatorChange(prev, user);
},
@@ -42,7 +54,13 @@ class IndicatorContainer extends Component {
document: USERNAME_CHANGED_SUBSCRIPTION,
updateQuery: (
prev,
{ subscriptionData: { data: { usernameChanged: { user } } } }
{
subscriptionData: {
data: {
usernameChanged: { user },
},
},
}
) => {
return handleIndicatorChange(prev, user);
},
@@ -200,7 +200,10 @@ const SEARCH_QUERY = gql`
`;
export default compose(
connect(null, mapDispatchToProps),
connect(
null,
mapDispatchToProps
),
withSetUserRole,
withUnsuspendUser,
withUnbanUser,
@@ -19,6 +19,9 @@ const mapDispatchToProps = dispatch =>
);
export default compose(
connect(mapStateToProps, mapDispatchToProps),
connect(
mapStateToProps,
mapDispatchToProps
),
withRejectUsername
)(RejectUsernameDialog);
@@ -174,7 +174,10 @@ const mapDispatchToProps = dispatch =>
export default compose(
withRouter,
connect(mapStateToProps, mapDispatchToProps),
connect(
mapStateToProps,
mapDispatchToProps
),
withUpdateSettings,
withConfigureQuery,
withMergedSettings('root.settings', 'pending', 'mergedSettings')
@@ -42,7 +42,10 @@ export default compose(
}
`,
}),
connect(mapStateToProps, mapDispatchToProps),
connect(
mapStateToProps,
mapDispatchToProps
),
mapProps(({ root, settings, updatePending, errors, ...rest }) => ({
slotPassthrough: {
root,
@@ -37,7 +37,10 @@ export default compose(
}
`,
}),
connect(mapStateToProps, mapDispatchToProps),
connect(
mapStateToProps,
mapDispatchToProps
),
mapProps(({ root, settings, updatePending, errors, ...rest }) => ({
slotPassthrough: {
root,
@@ -45,7 +45,10 @@ export default compose(
}
`,
}),
connect(mapStateToProps, mapDispatchToProps),
connect(
mapStateToProps,
mapDispatchToProps
),
mapProps(({ root, settings, updatePending, errors, ...rest }) => ({
slotPassthrough: {
root,
@@ -39,7 +39,10 @@ export default compose(
}
`,
}),
connect(mapStateToProps, mapDispatchToProps),
connect(
mapStateToProps,
mapDispatchToProps
),
mapProps(({ root, settings, updatePending, errors, ...rest }) => ({
slotPassthrough: {
root,
@@ -83,4 +83,7 @@ const mapDispatchToProps = dispatch =>
dispatch
);
export default connect(mapStateToProps, mapDispatchToProps)(InstallContainer);
export default connect(
mapStateToProps,
mapDispatchToProps
)(InstallContainer);
@@ -170,6 +170,7 @@ class Comment extends React.Component {
className={styles.external}
href={`${comment.asset.url}?commentId=${comment.id}`}
target="_blank"
rel="noopener noreferrer"
>
<Icon name="open_in_new" /> {t('comment.view_context')}
</a>
@@ -5,7 +5,10 @@ import { Button, Spinner, Icon } from 'coral-ui';
import Story from './Story';
const StorySearch = props => {
const { root: { assets }, data: { loading } } = props;
const {
root: { assets },
data: { loading },
} = props;
if (!props.moderation.storySearchVisible) {
return null;
@@ -22,7 +22,11 @@ class IndicatorContainer extends Component {
document: COMMENT_ADDED_SUBSCRIPTION,
updateQuery: (
prev,
{ subscriptionData: { data: { commentAdded: comment } } }
{
subscriptionData: {
data: { commentAdded: comment },
},
}
) => {
return this.handleCommentChange(prev, comment);
},
@@ -31,7 +35,11 @@ class IndicatorContainer extends Component {
document: COMMENT_FLAGGED_SUBSCRIPTION,
updateQuery: (
prev,
{ subscriptionData: { data: { commentFlagged: comment } } }
{
subscriptionData: {
data: { commentFlagged: comment },
},
}
) => {
return this.handleCommentChange(prev, comment);
},
@@ -40,7 +48,11 @@ class IndicatorContainer extends Component {
document: COMMENT_EDITED_SUBSCRIPTION,
updateQuery: (
prev,
{ subscriptionData: { data: { commentEdited: comment } } }
{
subscriptionData: {
data: { commentEdited: comment },
},
}
) => {
return this.handleCommentChange(prev, comment);
},
@@ -49,7 +61,11 @@ class IndicatorContainer extends Component {
document: COMMENT_ACCEPTED_SUBSCRIPTION,
updateQuery: (
prev,
{ subscriptionData: { data: { commentAccepted: comment } } }
{
subscriptionData: {
data: { commentAccepted: comment },
},
}
) => {
return this.handleCommentChange(prev, comment);
},
@@ -58,7 +74,11 @@ class IndicatorContainer extends Component {
document: COMMENT_REJECTED_SUBSCRIPTION,
updateQuery: (
prev,
{ subscriptionData: { data: { commentRejected: comment } } }
{
subscriptionData: {
data: { commentRejected: comment },
},
}
) => {
return this.handleCommentChange(prev, comment);
},
@@ -67,7 +87,11 @@ class IndicatorContainer extends Component {
document: COMMENT_RESET_SUBSCRIPTION,
updateQuery: (
prev,
{ subscriptionData: { data: { commentReset: comment } } }
{
subscriptionData: {
data: { commentReset: comment },
},
}
) => {
return this.handleCommentChange(prev, comment);
},
@@ -71,7 +71,9 @@ class ModerationContainer extends Component {
};
get activeTab() {
const { root: { asset, settings } } = this.props;
const {
root: { asset, settings },
} = this.props;
const id = getAssetId(this.props);
const tab = getTab(this.props);
@@ -94,7 +96,11 @@ class ModerationContainer extends Component {
variables,
updateQuery: (
prev,
{ subscriptionData: { data: { commentAdded: comment } } }
{
subscriptionData: {
data: { commentAdded: comment },
},
}
) => {
return this.handleCommentChange(prev, comment);
},
@@ -104,7 +110,11 @@ class ModerationContainer extends Component {
variables,
updateQuery: (
prev,
{ subscriptionData: { data: { commentAccepted: comment } } }
{
subscriptionData: {
data: { commentAccepted: comment },
},
}
) => {
const user =
comment.status_history[comment.status_history.length - 1]
@@ -125,7 +135,11 @@ class ModerationContainer extends Component {
variables,
updateQuery: (
prev,
{ subscriptionData: { data: { commentRejected: comment } } }
{
subscriptionData: {
data: { commentRejected: comment },
},
}
) => {
const user =
comment.status_history[comment.status_history.length - 1]
@@ -146,7 +160,11 @@ class ModerationContainer extends Component {
variables,
updateQuery: (
prev,
{ subscriptionData: { data: { commentReset: comment } } }
{
subscriptionData: {
data: { commentReset: comment },
},
}
) => {
const user =
comment.status_history[comment.status_history.length - 1]
@@ -167,7 +185,11 @@ class ModerationContainer extends Component {
variables,
updateQuery: (
prev,
{ subscriptionData: { data: { commentEdited: comment } } }
{
subscriptionData: {
data: { commentEdited: comment },
},
}
) => {
return this.handleCommentChange(prev, comment);
},
@@ -177,7 +199,11 @@ class ModerationContainer extends Component {
variables,
updateQuery: (
prev,
{ subscriptionData: { data: { commentFlagged: comment } } }
{
subscriptionData: {
data: { commentFlagged: comment },
},
}
) => {
return this.handleCommentChange(prev, comment);
},
@@ -289,7 +315,11 @@ class ModerationContainer extends Component {
};
render() {
const { root, root: { asset, settings }, data } = this.props;
const {
root,
root: { asset, settings },
data,
} = this.props;
const assetId = getAssetId(this.props);
if (assetId) {
@@ -546,7 +576,10 @@ const mapDispatchToProps = dispatch => ({
export default compose(
withQueueConfig(baseQueueConfig),
connect(mapStateToProps, mapDispatchToProps),
connect(
mapStateToProps,
mapDispatchToProps
),
withSetCommentStatus,
withModQueueQuery
)(ModerationContainer);
@@ -112,4 +112,7 @@ export const withAssetSearchQuery = withQuery(
}
);
export default compose(withRouter, withAssetSearchQuery)(StorySearchContainer);
export default compose(
withRouter,
withAssetSearchQuery
)(StorySearchContainer);
@@ -113,4 +113,7 @@ StoriesContainer.propTypes = {
updateAssetState: PropTypes.func.isRequired,
};
export default connect(mapStateToProps, mapDispatchToProps)(StoriesContainer);
export default connect(
mapStateToProps,
mapDispatchToProps
)(StoriesContainer);
@@ -41,7 +41,13 @@ class EmbedContainer extends React.Component {
document: USER_BANNED_SUBSCRIPTION,
updateQuery: (
_,
{ subscriptionData: { data: { userBanned: { state } } } }
{
subscriptionData: {
data: {
userBanned: { state },
},
},
}
) => {
notify('info', t('your_account_has_been_banned'));
props.updateStatus(state.status);
@@ -51,7 +57,13 @@ class EmbedContainer extends React.Component {
document: USER_SUSPENDED_SUBSCRIPTION,
updateQuery: (
_,
{ subscriptionData: { data: { userSuspended: { state } } } }
{
subscriptionData: {
data: {
userSuspended: { state },
},
},
}
) => {
notify('info', t('your_account_has_been_suspended'));
props.updateStatus(state.status);
@@ -61,7 +73,13 @@ class EmbedContainer extends React.Component {
document: USERNAME_REJECTED_SUBSCRIPTION,
updateQuery: (
_,
{ subscriptionData: { data: { usernameRejected: { state } } } }
{
subscriptionData: {
data: {
usernameRejected: { state },
},
},
}
) => {
notify('info', t('your_username_has_been_rejected'));
props.updateStatus(state.status);
@@ -324,7 +342,10 @@ const mapDispatchToProps = dispatch =>
export default compose(
withPopupAuthHandler,
connect(mapStateToProps, mapDispatchToProps),
connect(
mapStateToProps,
mapDispatchToProps
),
branch(props => !props.checkedInitialLogin, renderComponent(Spinner)),
withEmbedQuery
)(EmbedContainer);
+24 -4
View File
@@ -126,7 +126,9 @@ export default {
},
mutations: {
PostComment: ({
variables: { input: { asset_id, body, parent_id, tags = [] } },
variables: {
input: { asset_id, body, parent_id, tags = [] },
},
state: { auth },
}) => ({
optimisticResponse: {
@@ -193,7 +195,13 @@ export default {
updateQueries: {
CoralEmbedStream_Embed: (
prev,
{ mutationResult: { data: { createComment: { comment } } } }
{
mutationResult: {
data: {
createComment: { comment },
},
},
}
) => {
if (
(![ADMIN, MODERATOR].includes(prev.me.role) &&
@@ -208,7 +216,13 @@ export default {
},
CoralEmbedStream_Profile: (
prev,
{ mutationResult: { data: { createComment: { comment } } } }
{
mutationResult: {
data: {
createComment: { comment },
},
},
}
) => {
return update(prev, {
me: {
@@ -224,7 +238,13 @@ export default {
updateQueries: {
CoralEmbedStream_Embed: (
prev,
{ mutationResult: { data: { editComment: { comment } } } }
{
mutationResult: {
data: {
editComment: { comment },
},
},
}
) => {
if (
!['PREMOD', 'REJECTED', 'SYSTEM_WITHHELD'].includes(comment.status)
@@ -139,7 +139,10 @@ const mapDispatchToProps = dispatch =>
);
const enhance = compose(
connect(mapStateToProps, mapDispatchToProps),
connect(
mapStateToProps,
mapDispatchToProps
),
withSettingsFragments,
withUpdateAssetSettings,
withMergedSettings('asset.settings', 'pending', 'mergedSettings')
@@ -22,7 +22,14 @@ class CommentHistoryContainer extends Component {
limit: 5,
cursor: this.props.root.me.comments.endCursor,
},
updateQuery: (previous, { fetchMoreResult: { me: { comments } } }) => {
updateQuery: (
previous,
{
fetchMoreResult: {
me: { comments },
},
}
) => {
const updated = update(previous, {
me: {
comments: {
@@ -97,7 +104,10 @@ const mapStateToProps = state => ({
});
export default compose(
connect(mapStateToProps, null),
connect(
mapStateToProps,
null
),
withCommentHistoryFragments,
withFetchMore
)(CommentHistoryContainer);
@@ -80,6 +80,7 @@ const mapStateToProps = state => ({
currentUser: state.auth.user,
});
export default compose(connect(mapStateToProps), withProfileQuery)(
ProfileContainer
);
export default compose(
connect(mapStateToProps),
withProfileQuery
)(ProfileContainer);
@@ -55,7 +55,10 @@ export default compose(
${Settings.fragments.root}
`,
}),
connect(mapStateToProps, mapDispatchToProps),
connect(
mapStateToProps,
mapDispatchToProps
),
withSlotElements({
slot: 'profileSettings',
propName: 'profileSettingsSlotElements',
@@ -117,8 +117,12 @@ export default class Comment extends React.Component {
}
componentWillReceiveProps(next) {
const { comment: { replies: prevReplies } } = this.props;
const { comment: { replies: nextReplies } } = next;
const {
comment: { replies: prevReplies },
} = this.props;
const {
comment: { replies: nextReplies },
} = next;
if (
prevReplies &&
nextReplies &&
@@ -243,7 +247,10 @@ export default class Comment extends React.Component {
}
loadNewReplies = () => {
const { comment: { replies, replyCount, id }, emit } = this.props;
const {
comment: { replies, replyCount, id },
emit,
} = this.props;
if (replyCount > replies.nodes.length) {
this.setState({ loadingState: 'loading' });
this.props
@@ -292,7 +299,11 @@ export default class Comment extends React.Component {
// getVisibileReplies returns a list containing comments
// which were authored by current user or comes before the `idCursor`.
getVisibileReplies() {
const { comment: { replies }, currentUser, liveUpdates } = this.props;
const {
comment: { replies },
currentUser,
liveUpdates,
} = this.props;
const idCursor = this.state.idCursors[0];
const userId = currentUser ? currentUser.id : null;
@@ -18,6 +18,7 @@ const ModerationLink = props =>
className="talk-embed-stream-moderation-link"
href={`${BASE_PATH}admin/moderate/${props.assetId}`}
target="_blank"
rel="noopener noreferrer"
>
{t('moderate_this_stream')}
</a>
@@ -211,7 +211,10 @@ class Stream extends React.Component {
root,
appendItemArray,
asset,
asset: { comment: highlightedComment, settings: { questionBoxEnable } },
asset: {
comment: highlightedComment,
settings: { questionBoxEnable },
},
postComment,
notify,
updateItem,
@@ -215,7 +215,10 @@ const mapStateToProps = state => ({
const enhance = compose(
withHooks(['preSubmit', 'postSubmit']),
connect(mapStateToProps, null)
connect(
mapStateToProps,
null
)
);
export default enhance(CommentBox);
@@ -33,4 +33,7 @@ const mapDispatchToProps = dispatch =>
dispatch
);
export default connect(null, mapDispatchToProps)(CommentNotFound);
export default connect(
null,
mapDispatchToProps
)(CommentNotFound);
@@ -54,7 +54,11 @@ class StreamContainer extends React.Component {
},
updateQuery: (
prev,
{ subscriptionData: { data: { commentEdited } } }
{
subscriptionData: {
data: { commentEdited },
},
}
) => {
// Ignore mutations from me.
// TODO: need way to detect mutations created by this client, and allow mutations from other clients.
@@ -87,7 +91,14 @@ class StreamContainer extends React.Component {
variables: {
assetId: this.props.asset.id,
},
updateQuery: (prev, { subscriptionData: { data: { commentAdded } } }) => {
updateQuery: (
prev,
{
subscriptionData: {
data: { commentAdded },
},
}
) => {
// Ignore mutations from me.
// TODO: need way to detect mutations created by this client, and allow mutations from other clients.
if (
@@ -488,7 +499,10 @@ const mapDispatchToProps = dispatch =>
export default compose(
withFragments(fragments),
withEmit,
connect(mapStateToProps, mapDispatchToProps),
connect(
mapStateToProps,
mapDispatchToProps
),
withPostComment,
// `talk-plugin-flags` has a custom error handling logic.
withPostFlag({ notifyOnError: false }),
@@ -78,7 +78,12 @@ function markLinks(body, keyPrefix) {
matches.forEach((match, i) => {
content.push(body.substring(index, match.index));
content.push(
<a key={`${keyPrefix}_${i}`} href={match.url} target="_blank">
<a
key={`${keyPrefix}_${i}`}
href={match.url}
target="_blank"
rel="noopener noreferrer"
>
{match.text}
</a>
);
+4 -1
View File
@@ -103,5 +103,8 @@ export default compose(
size: props => props.size,
defaultComponent: props => props.defaultComponent,
}),
connect(mapStateToProps, null)
connect(
mapStateToProps,
null
)
)(Slot);
+4 -1
View File
@@ -2,5 +2,8 @@ import { connect } from 'react-redux';
export default (mapStateToProps, ...rest) => BaseComponent => {
BaseComponent.mapStateToProps = mapStateToProps;
return connect(mapStateToProps, ...rest)(BaseComponent);
return connect(
mapStateToProps,
...rest
)(BaseComponent);
};
@@ -95,7 +95,10 @@ const mapDispatchToProps = dispatch =>
bindActionCreators({ updateUsername, updateStatus }, dispatch);
export default compose(
connect(mapStateToProps, mapDispatchToProps),
connect(
mapStateToProps,
mapDispatchToProps
),
withSetUsernameMutation,
withSetUsername
);
+4 -1
View File
@@ -121,4 +121,7 @@ const withSignUp = hoistStatics(WrappedComponent => {
return WithSignUp;
});
export default compose(withSettingsQuery, withSignUp);
export default compose(
withSettingsQuery,
withSignUp
);
@@ -198,5 +198,11 @@ const mapStateToProps = state => ({
* })(MyComponent);
*/
export default settings => {
return compose(connect(mapStateToProps, null), createHOC(settings));
return compose(
connect(
mapStateToProps,
null
),
createHOC(settings)
);
};
+5 -1
View File
@@ -9,7 +9,11 @@ export function createReduxEmitter(eventEmitter) {
// Handle apollo actions.
if (action.type.startsWith('APOLLO_')) {
if (action.type === 'APOLLO_SUBSCRIPTION_RESULT') {
const { operationName, variables, result: { data } } = action;
const {
operationName,
variables,
result: { data },
} = action;
eventEmitter.emit(`subscription.${operationName}.data`, {
variables,
data,
+3 -1
View File
@@ -64,7 +64,9 @@ const CONFIG = {
process.env.TALK_LOGGING_LEVEL
)
? process.env.TALK_LOGGING_LEVEL
: process.env.NODE_ENV === 'test' ? 'fatal' : 'info',
: process.env.NODE_ENV === 'test'
? 'fatal'
: 'info',
// REVISION_HASH when using the docker build will contain the build hash that
// it was built at.
+3 -1
View File
@@ -149,7 +149,9 @@ class Context {
* operations.
*/
static forSystem() {
const { models: { User } } = connectors;
const {
models: { User },
} = connectors;
// Create the system user.
const user = new User({ system: true });
+3 -1
View File
@@ -1,7 +1,9 @@
const { forEachField } = require('./utils');
const { maskErrors } = require('graphql-errors');
const { TalkError } = require('../errors');
const { Error: { ValidationError } } = require('mongoose');
const {
Error: { ValidationError },
} = require('mongoose');
// If an APIError happens in a mutation, then respond with `{errors: Array}`
// according to the schema.
+14 -3
View File
@@ -6,7 +6,11 @@ const { first, get, merge, remove, groupBy, reduce, isNil } = require('lodash');
* Gets actions based on their item id's.
*/
const genActionsByItemID = (
{ connectors: { services: { Actions } } },
{
connectors: {
services: { Actions },
},
},
item_ids
) => {
return Actions.findByItemIdArray(item_ids).then(
@@ -21,7 +25,12 @@ const genActionsByItemID = (
* @param {Array<String>} itemIDs the items that we need to get the actions for
*/
const genActionsAuthoredWithID = (
{ user = {}, connectors: { services: { Actions } } },
{
user = {},
connectors: {
services: { Actions },
},
},
itemIDs
) =>
Actions.getUserActions(user.id, itemIDs).then(
@@ -50,7 +59,9 @@ const iterateActionCounts = action_counts =>
* @param {Object} item the item that we're getting the actions for
*/
async function getUserActions(ctx, { action_counts, id }) {
const { loaders: { Actions } } = ctx;
const {
loaders: { Actions },
} = ctx;
// Get the total count for all action types.
const totalActionCount = reduce(
+19 -3
View File
@@ -2,7 +2,14 @@ const DataLoader = require('dataloader');
const { URL } = require('url');
const { singleJoinBy, SingletonResolver } = require('./util');
const genAssetsByID = ({ connectors: { models: { Asset } } }, ids) =>
const genAssetsByID = (
{
connectors: {
models: { Asset },
},
},
ids
) =>
Asset.find({
id: {
$in: ids,
@@ -10,7 +17,11 @@ const genAssetsByID = ({ connectors: { models: { Asset } } }, ids) =>
}).then(singleJoinBy(ids, 'id'));
const getAssetsByQuery = async (
{ connectors: { services: { Assets } } },
{
connectors: {
services: { Assets },
},
},
query
) => {
// If we are requesting based on a limit, ask for one more than we want.
@@ -126,7 +137,12 @@ const findOrCreateAssetByURL = async (ctx, url) => {
};
const findByUrl = async (
{ connectors: { errors, services: { Assets } } },
{
connectors: {
errors,
services: { Assets },
},
},
asset_url
) => {
// Try to validate that the url is valid. If the URL constructor throws an
+17 -3
View File
@@ -51,7 +51,11 @@ const genUserByIDs = async (ctx, ids) => {
return [];
}
const { connectors: { models: { User } } } = ctx;
const {
connectors: {
models: { User },
},
} = ctx;
return User.find({ id: { $in: ids } }).then(util.singleJoinBy(ids, 'id'));
};
@@ -63,7 +67,12 @@ const genUserByIDs = async (ctx, ids) => {
* @param {Object} query query terms to apply to the users query
*/
const getUsersByQuery = async (
{ user, connectors: { models: { User } } },
{
user,
connectors: {
models: { User },
},
},
{ limit, cursor, value = '', state, action_type, sortOrder }
) => {
let query = User.find();
@@ -175,7 +184,12 @@ const getUsersByQuery = async (
* query
*/
const getCountByQuery = async (
{ user, connectors: { models: { User } } },
{
user,
connectors: {
models: { User },
},
},
{ action_type, state }
) => {
const query = User.find();
+16 -3
View File
@@ -11,7 +11,9 @@ const { IGNORE_FLAGS_AGAINST_STAFF } = require('../../config');
* @return {Promise} resolves to the referenced item
*/
const getActionItem = async (ctx, { item_id, item_type }) => {
const { loaders: { Comments, Users } } = ctx;
const {
loaders: { Comments, Users },
} = ctx;
switch (item_type) {
case 'COMMENTS': {
@@ -42,7 +44,13 @@ const createAction = async (
ctx,
{ item_id, item_type, action_type, group_id, metadata = {} }
) => {
const { user = {}, pubsub, connectors: { services: { Actions } } } = ctx;
const {
user = {},
pubsub,
connectors: {
services: { Actions },
},
} = ctx;
// Gets the item referenced by the action.
const item = await getActionItem(ctx, { item_id, item_type });
@@ -107,7 +115,12 @@ const createAction = async (
* @return {Promise} resolves to the deleted action, or null if not found.
*/
const deleteAction = (ctx, { id }) => {
const { user, connectors: { services: { Actions } } } = ctx;
const {
user,
connectors: {
services: { Actions },
},
} = ctx;
return Actions.delete({ id, user_id: user.id });
};
+5 -1
View File
@@ -63,7 +63,11 @@ const closeNow = async (ctx, id) =>
* @param {String} id the asset's id to scrape
*/
const scrapeAsset = async (ctx, id) => {
const { connectors: { services: { Scraper } } } = ctx;
const {
connectors: {
services: { Scraper },
},
} = ctx;
return Scraper.create(ctx, id);
};
+23 -5
View File
@@ -14,7 +14,10 @@ const {
} = require('../../perms/constants');
const resolveTagsForComment = async (ctx, { asset_id, tags = [] }) => {
const { user, loaders: { Tags } } = ctx;
const {
user,
loaders: { Tags },
} = ctx;
const item_type = 'COMMENTS';
// Handle Tags
@@ -156,7 +159,11 @@ const createComment = async (
metadata = {},
}
) => {
const { user, loaders: { Comments }, pubsub } = ctx;
const {
user,
loaders: { Comments },
pubsub,
} = ctx;
// Resolve the tags for the comment.
tags = await resolveTagsForComment(ctx, { asset_id, tags });
@@ -202,7 +209,11 @@ const createComment = async (
* @return {Promise} resolves to a new comment
*/
const createPublicComment = async (ctx, comment) => {
const { connectors: { services: { Moderation } } } = ctx;
const {
connectors: {
services: { Moderation },
},
} = ctx;
// We then take the wordlist and the comment into consideration when
// considering what status to assign the new comment, and resolve the new
@@ -245,7 +256,10 @@ const createActions = async (item_id, actions = []) =>
* @param {String} status the new status of the comment
*/
const setStatus = async (ctx, { id, status }) => {
const { user, loaders: { Comments } } = ctx;
const {
user,
loaders: { Comments },
} = ctx;
let comment = await CommentsService.pushStatus(
id,
@@ -281,7 +295,11 @@ const editComment = async (
ctx,
{ id, asset_id, edit: { body, metadata = {} } }
) => {
const { connectors: { services: { Moderation } } } = ctx;
const {
connectors: {
services: { Moderation },
},
} = ctx;
// Build up the new comment we're setting. We need to check this with
// moderation now.
+8 -2
View File
@@ -92,7 +92,11 @@ const actionDecrTransformer = ({ item_id, action_type, group_id }) => {
// delUser will delete a given user with the specified id.
const delUser = async (ctx, id) => {
const { connectors: { models: { User, Action, Comment } } } = ctx;
const {
connectors: {
models: { User, Action, Comment },
},
} = ctx;
// Find the user we're removing.
const user = await User.findOne({ id });
@@ -178,7 +182,9 @@ const changeUserPassword = async (ctx, oldPassword, newPassword) => {
const {
user,
loaders: { Settings },
connectors: { services: { I18n } },
connectors: {
services: { I18n },
},
} = ctx;
// Verify the old password.
+32 -5
View File
@@ -1,7 +1,13 @@
const { decorateWithTags, getRequestedFields } = require('./util');
const Asset = {
async comment({ id }, { id: commentId }, { loaders: { Comments } }) {
async comment(
{ id },
{ id: commentId },
{
loaders: { Comments },
}
) {
// Load the comment from the database.
const comment = await Comments.get.load(commentId);
if (!comment) {
@@ -15,7 +21,13 @@ const Asset = {
return comment;
},
comments({ id }, { query, deep }, { loaders: { Comments } }) {
comments(
{ id },
{ query, deep },
{
loaders: { Comments },
}
) {
if (!deep) {
query.parent_id = null;
}
@@ -25,7 +37,13 @@ const Asset = {
return Comments.getByQuery(query);
},
commentCount({ id, commentCount }, { tags }, { loaders: { Comments } }) {
commentCount(
{ id, commentCount },
{ tags },
{
loaders: { Comments },
}
) {
if (commentCount != null) {
return commentCount;
}
@@ -46,7 +64,9 @@ const Asset = {
totalCommentCount(
{ id, totalCommentCount },
{ tags },
{ loaders: { Comments } }
{
loaders: { Comments },
}
) {
if (totalCommentCount != null) {
return totalCommentCount;
@@ -64,7 +84,14 @@ const Asset = {
return Comments.countByAssetID.load(id);
},
async settings({ settings = null }, _, { loaders: { Settings } }, info) {
async settings(
{ settings = null },
_,
{
loaders: { Settings },
},
info
) {
// Get the fields we want from the settings.
const fields = getRequestedFields(info);
+49 -7
View File
@@ -16,19 +16,37 @@ const Comment = {
hasParent({ parent_id }) {
return !!parent_id;
},
parent({ parent_id }, _, { loaders: { Comments } }) {
parent(
{ parent_id },
_,
{
loaders: { Comments },
}
) {
if (parent_id == null) {
return null;
}
return Comments.get.load(parent_id);
},
user({ author_id }, _, { loaders: { Users } }) {
user(
{ author_id },
_,
{
loaders: { Users },
}
) {
if (author_id) {
return Users.getByID.load(author_id);
}
},
replies({ id, asset_id, reply_count }, { query }, { loaders: { Comments } }) {
replies(
{ id, asset_id, reply_count },
{ query },
{
loaders: { Comments },
}
) {
// Don't bother looking up replies if there aren't any there!
if (reply_count === 0) {
return {
@@ -44,17 +62,35 @@ const Comment = {
return Comments.getByQuery(query);
},
replyCount: property('reply_count'),
actions({ id }, _, { loaders: { Actions } }) {
actions(
{ id },
_,
{
loaders: { Actions },
}
) {
return Actions.getByID.load(id);
},
action_summaries(comment, _, { loaders: { Actions } }) {
action_summaries(
comment,
_,
{
loaders: { Actions },
}
) {
if (comment.action_summaries) {
return comment.action_summaries;
}
return Actions.getSummariesByItem.load(comment);
},
asset({ asset_id }, _, { loaders: { Assets } }) {
asset(
{ asset_id },
_,
{
loaders: { Assets },
}
) {
return Assets.getByID.load(asset_id);
},
editing: async (comment, _, { loaders: { Settings } }) => {
@@ -71,7 +107,13 @@ const Comment = {
editableUntil: editableUntil,
};
},
async url(comment, args, { loaders: { Assets } }) {
async url(
comment,
args,
{
loaders: { Assets },
}
) {
const asset = await Assets.getByID.load(comment.asset_id);
if (!asset) {
return null;
+64 -9
View File
@@ -6,17 +6,36 @@ const {
} = require('../../perms/constants');
const RootQuery = {
assets(_, { query }, { loaders: { Assets } }) {
assets(
_,
{ query },
{
loaders: { Assets },
}
) {
return Assets.getByQuery(query);
},
asset(_, query, { loaders: { Assets } }) {
asset(
_,
query,
{
loaders: { Assets },
}
) {
if (query.id) {
return Assets.getByID.load(query.id);
}
return Assets.getByURL(query.url);
},
settings(_, args, { loaders: { Settings } }, info) {
settings(
_,
args,
{
loaders: { Settings },
},
info
) {
// Get the fields we want from the settings.
const fields = getRequestedFields(info);
@@ -26,15 +45,33 @@ const RootQuery = {
// This endpoint is used for loading moderation queues, so hide it in the
// event that we aren't an admin.
async comments(_, { query }, { loaders: { Comments } }) {
async comments(
_,
{ query },
{
loaders: { Comments },
}
) {
return Comments.getByQuery(query);
},
comment(_, { id }, { loaders: { Comments } }) {
comment(
_,
{ id },
{
loaders: { Comments },
}
) {
return Comments.get.load(id);
},
async commentCount(_, { query }, { loaders: { Comments, Assets } }) {
async commentCount(
_,
{ query },
{
loaders: { Comments, Assets },
}
) {
const { asset_url, asset_id } = query;
if (
(!asset_id || asset_id.length === 0) &&
@@ -50,7 +87,13 @@ const RootQuery = {
return Comments.getCountByQuery(query);
},
async userCount(_, { query }, { loaders: { Users } }) {
async userCount(
_,
{ query },
{
loaders: { Users },
}
) {
return Users.getCountByQuery(query);
},
@@ -65,13 +108,25 @@ const RootQuery = {
},
// this returns an arbitrary user
user(_, { id }, { loaders: { Users } }) {
user(
_,
{ id },
{
loaders: { Users },
}
) {
return Users.getByID.load(id);
},
// This endpoint is used for loading the user moderation queues (users whose username has been flagged),
// so hide it in the event that we aren't an admin.
users(_, { query }, { loaders: { Users } }) {
users(
_,
{ query },
{
loaders: { Users },
}
) {
return Users.getByQuery(query);
},
};
+7 -1
View File
@@ -5,7 +5,13 @@ const Settings = {
karmaThresholds: (
settings,
args,
{ connectors: { services: { Karma: { THRESHOLDS } } } }
{
connectors: {
services: {
Karma: { THRESHOLDS },
},
},
}
) => THRESHOLDS,
};
+28 -4
View File
@@ -16,20 +16,44 @@ const {
const { property } = require('lodash');
const User = {
action_summaries(user, _, { loaders: { Actions } }) {
action_summaries(
user,
_,
{
loaders: { Actions },
}
) {
return Actions.getSummariesByItem.load(user);
},
actions({ id }, _, { loaders: { Actions } }) {
actions(
{ id },
_,
{
loaders: { Actions },
}
) {
return Actions.getByID.load(id);
},
comments({ id }, { query }, { loaders: { Comments } }) {
comments(
{ id },
{ query },
{
loaders: { Comments },
}
) {
// Set the author id on the query.
query.author_id = id;
return Comments.getByQuery(query);
},
ignoredUsers({ ignoresUsers }, args, { loaders: { Users } }) {
ignoredUsers(
{ ignoresUsers },
args,
{
loaders: { Users },
}
) {
// Return nothing if there is nothing to query for.
if (!ignoresUsers || ignoresUsers.length <= 0) {
return [];
+7 -2
View File
@@ -413,7 +413,9 @@ export default (reaction, options = {}) =>
update: (
proxy,
{
data: { [`create${Reaction}Action`]: { [reaction]: action } },
data: {
[`create${Reaction}Action`]: { [reaction]: action },
},
}
) => {
const a = {
@@ -466,7 +468,10 @@ export default (reaction, options = {}) =>
${fragments.comment ? fragments.comment : ''}
`,
}),
connect(mapStateToProps, mapDispatchToProps),
connect(
mapStateToProps,
mapDispatchToProps
),
withDeleteReaction,
withPostReaction
);
@@ -52,5 +52,8 @@ export default ({ sortBy = 'created_at', sortOrder = 'DESC', label }) =>
);
}
}
return connect(mapStateToProps, mapDispatchToProps)(WithSortOption);
return connect(
mapStateToProps,
mapDispatchToProps
)(WithSortOption);
});
+4 -1
View File
@@ -139,7 +139,10 @@ export default (tag, options = {}) =>
}),
withAddTag,
withRemoveTag,
connect(mapStateToProps, null)
connect(
mapStateToProps,
null
)
);
WithTags.displayName = `WithTags(${getDisplayName(WrappedComponent)})`;
+8 -1
View File
@@ -180,7 +180,14 @@ function getReactionConfig(reaction) {
[`${Reaction}Action`]: {
// This will load the user for the specific action. We'll limit this to the
// admin users only or the current logged in user.
user({ user_id }, _, { loaders: { Users }, user }) {
user(
{ user_id },
_,
{
loaders: { Users },
user,
}
) {
if (user && (user.can(SEARCH_OTHER_USERS) || user_id === user.id)) {
return Users.getByID.load(user_id);
}
@@ -5,4 +5,7 @@ import CheckSpamHook from '../components/CheckSpamHook';
const mapDispatchToProps = dispatch => bindActionCreators({ notify }, dispatch);
export default connect(null, mapDispatchToProps)(CheckSpamHook);
export default connect(
null,
mapDispatchToProps
)(CheckSpamHook);
@@ -58,6 +58,9 @@ const mapDispatchToProps = dispatch =>
);
export default compose(
connect(mapStateToProps, mapDispatchToProps),
connect(
mapStateToProps,
mapDispatchToProps
),
withForgotPassword
)(ForgotPasswordContainer);
@@ -50,4 +50,7 @@ const mapDispatchToProps = dispatch =>
dispatch
);
export default connect(mapStateToProps, mapDispatchToProps)(MainContainer);
export default connect(
mapStateToProps,
mapDispatchToProps
)(MainContainer);
@@ -59,6 +59,9 @@ const mapDispatchToProps = dispatch =>
);
export default compose(
connect(mapStateToProps, mapDispatchToProps),
connect(
mapStateToProps,
mapDispatchToProps
),
withResendEmailConfirmation
)(ResendEmailConfirmatonContainer);
@@ -89,6 +89,9 @@ const mapDispatchToProps = dispatch =>
);
export default compose(
connect(mapStateToProps, mapDispatchToProps),
connect(
mapStateToProps,
mapDispatchToProps
),
withSignIn
)(SignInContainer);
@@ -145,6 +145,9 @@ const mapDispatchToProps = dispatch =>
);
export default compose(
connect(mapStateToProps, mapDispatchToProps),
connect(
mapStateToProps,
mapDispatchToProps
),
withSignUp
)(SignUpContainer);
@@ -58,7 +58,10 @@ const mapStateToProps = state => ({
});
export default compose(
connect(mapStateToProps, null),
connect(
mapStateToProps,
null
),
withSetUsername,
branch(props => !props.username, renderNothing)
)(SetUsernameDialogContainer);
@@ -11,4 +11,7 @@ const mapStateToProps = state => ({
const mapDispatchToProps = dispatch =>
bindActionCreators({ showSignInDialog }, dispatch);
export default connect(mapStateToProps, mapDispatchToProps)(SignInButton);
export default connect(
mapStateToProps,
mapDispatchToProps
)(SignInButton);
@@ -10,4 +10,7 @@ const mapStateToProps = state => ({
const mapDispatchToProps = dispatch => bindActionCreators({ logout }, dispatch);
export default connect(mapStateToProps, mapDispatchToProps)(UserBox);
export default connect(
mapStateToProps,
mapDispatchToProps
)(UserBox);
@@ -122,7 +122,10 @@ const withAuthorNameFragments = withFragments({
});
const enhance = compose(
connect(mapStateToProps, mapDispatchToProps),
connect(
mapStateToProps,
mapDispatchToProps
),
withAuthorNameFragments
);
@@ -85,7 +85,13 @@ module.exports = {
}),
resolvers: {
Comment: {
deepReplyCount({ id }, args, { loaders: { Comments } }) {
deepReplyCount(
{ id },
args,
{
loaders: { Comments },
}
) {
return Comments.getDeepCount.load(id);
},
},
@@ -6,4 +6,7 @@ import FacebookButton from '../components/FacebookButton';
const mapDispatchToProps = dispatch =>
bindActionCreators({ onClick: loginWithFacebook }, dispatch);
export default connect(null, mapDispatchToProps)(FacebookButton);
export default connect(
null,
mapDispatchToProps
)(FacebookButton);
@@ -5,7 +5,11 @@ module.exports = router => {
*/
router.get('/api/v1/auth/facebook', (req, res, next) => {
const {
connectors: { services: { Passport: { passport } } },
connectors: {
services: {
Passport: { passport },
},
},
} = req.context;
return passport.authenticate('facebook', {
@@ -22,7 +26,9 @@ module.exports = router => {
router.get('/api/v1/auth/facebook/callback', (req, res, next) => {
const {
connectors: {
services: { Passport: { passport, HandleAuthPopupCallback } },
services: {
Passport: { passport, HandleAuthPopupCallback },
},
},
} = req.context;
@@ -19,7 +19,10 @@ const mapDispatchToProps = dispatch =>
);
const enhance = compose(
connect(mapStateToProps, mapDispatchToProps),
connect(
mapStateToProps,
mapDispatchToProps
),
withTags('featured')
);
@@ -13,7 +13,10 @@ const mapDispatchToProps = dispatch =>
);
const enhance = compose(
connect(null, mapDispatchToProps),
connect(
null,
mapDispatchToProps
),
withTags('featured')
);
@@ -12,7 +12,13 @@ class ModIndicatorSubscription extends React.Component {
document: COMMENT_FEATURED_SUBSCRIPTION,
updateQuery: (
prev,
{ subscriptionData: { data: { commentFeatured: { comment } } } }
{
subscriptionData: {
data: {
commentFeatured: { comment },
},
},
}
) => {
return this.props.handleCommentChange(prev, comment);
},
@@ -21,7 +27,13 @@ class ModIndicatorSubscription extends React.Component {
document: COMMENT_UNFEATURED_SUBSCRIPTION,
updateQuery: (
prev,
{ subscriptionData: { data: { commentUnfeatured: { comment } } } }
{
subscriptionData: {
data: {
commentUnfeatured: { comment },
},
},
}
) => {
return this.props.handleCommentChange(prev, comment);
},
@@ -28,7 +28,13 @@ class ModSubscription extends React.Component {
},
updateQuery: (
prev,
{ subscriptionData: { data: { commentFeatured: { user, comment } } } }
{
subscriptionData: {
data: {
commentFeatured: { user, comment },
},
},
}
) => {
const notifyText =
this.props.user.id === user.id
@@ -50,7 +56,9 @@ class ModSubscription extends React.Component {
prev,
{
subscriptionData: {
data: { commentUnfeatured: { user, comment } },
data: {
commentUnfeatured: { user, comment },
},
},
}
) => {
@@ -117,7 +125,10 @@ const mapStateToProps = state => ({
});
export default compose(
connect(mapStateToProps, null),
connect(
mapStateToProps,
null
),
withVariables,
withSubscribeToMore
)(ModSubscription);
@@ -22,7 +22,10 @@ const fragments = {
`,
};
const enhance = compose(
connect(null, mapDispatchToProps),
connect(
null,
mapDispatchToProps
),
withTags('featured', { fragments })
);
@@ -90,7 +90,10 @@ const mapDispatchToProps = dispatch =>
);
const enhance = compose(
connect(null, mapDispatchToProps),
connect(
null,
mapDispatchToProps
),
withFetchMore,
withVariables,
withFragments({
+16 -4
View File
@@ -59,8 +59,14 @@ module.exports = {
addTag: {
async post(
obj,
{ tag: { name, id, item_type } },
{ user, mutators: { Comment }, pubsub }
{
tag: { name, id, item_type },
},
{
user,
mutators: { Comment },
pubsub,
}
) {
if (name === 'FEATURED' && item_type === 'COMMENTS') {
const comment = await Comment.setStatus({
@@ -76,8 +82,14 @@ module.exports = {
removeTag: {
async post(
obj,
{ tag: { name, id, item_type } },
{ user, loaders: { Comments }, pubsub }
{
tag: { name, id, item_type },
},
{
user,
loaders: { Comments },
pubsub,
}
) {
if (name === 'FEATURED' && item_type === 'COMMENTS') {
const comment = await Comments.get.load(id);
@@ -10,7 +10,12 @@ import {
class FlagDetails extends Component {
render() {
const { comment: { actions }, more, root, comment } = this.props;
const {
comment: { actions },
more,
root,
comment,
} = this.props;
const flagActions =
actions && actions.filter(a => a.__typename === 'FlagAction');
@@ -5,7 +5,10 @@ import styles from './UserFlagDetails.css';
class UserFlagDetails extends Component {
render() {
const { comment: { actions }, viewUserDetail } = this.props;
const {
comment: { actions },
viewUserDetail,
} = this.props;
const flagActions =
actions && actions.filter(a => a.__typename === 'FlagAction');
@@ -15,7 +15,10 @@ const mapDispatchToProps = dispatch => ({
});
const enhance = compose(
connect(null, mapDispatchToProps),
connect(
null,
mapDispatchToProps
),
withFragments({
comment: gql`
fragment CoralAdmin_UserFlagDetails_comment on Comment {
@@ -6,4 +6,7 @@ import GoogleButton from '../components/GoogleButton';
const mapDispatchToProps = dispatch =>
bindActionCreators({ onClick: loginWithGoogle }, dispatch);
export default connect(null, mapDispatchToProps)(GoogleButton);
export default connect(
null,
mapDispatchToProps
)(GoogleButton);
@@ -45,7 +45,10 @@ const withIgnoreUserActionFragments = withFragments({
});
const enhance = compose(
connect(null, mapDispatchToProps),
connect(
null,
mapDispatchToProps
),
withIgnoreUserActionFragments,
excludeIf(({ root: { me }, comment }) => !me || me.id === comment.user.id)
);
@@ -65,7 +65,10 @@ const withIgnoreUserConfirmationFragments = withFragments({
});
const enhance = compose(
connect(null, mapDispatchToProps),
connect(
null,
mapDispatchToProps
),
withIgnoreUserConfirmationFragments,
withIgnoreUser
);
@@ -37,6 +37,9 @@ const withIgnoredUserSectionFragments = withFragments({
`,
});
const enhance = compose(withIgnoredUserSectionFragments, withStopIgnoringUser);
const enhance = compose(
withIgnoredUserSectionFragments,
withStopIgnoringUser
);
export default enhance(IgnoredUserSectionContainer);
@@ -142,7 +142,9 @@ class AddEmailAddressDialog extends React.Component {
render() {
const { errors, formData, showErrors, step } = this.state;
const { root: { settings } } = this.props;
const {
root: { settings },
} = this.props;
return (
<Dialog className={styles.dialog} open={true}>
@@ -135,7 +135,11 @@ class ChangePassword extends React.Component {
};
onForgotPassword = async () => {
const { root: { me: { email } } } = this.props;
const {
root: {
me: { email },
},
} = this.props;
try {
await this.props.forgotPassword(email);
@@ -114,7 +114,11 @@ class Profile extends React.Component {
isSaveEnabled = () => {
const { formData } = this.state;
const { root: { me: { username, email } } } = this.props;
const {
root: {
me: { username, email },
},
} = this.props;
const formHasErrors = !!Object.keys(this.state.errors).length;
const validUsername =
formData.newUsername && formData.newUsername !== username;
@@ -166,7 +170,13 @@ class Profile extends React.Component {
render() {
const {
root: { me: { username, email, state: { status } } },
root: {
me: {
username,
email,
state: { status },
},
},
notify,
} = this.props;
const { editing, formData, showDialog } = this.state;
@@ -36,7 +36,10 @@ const withData = withFragments({
});
export default compose(
connect(mapStateToProps, mapDispatchToProps),
connect(
mapStateToProps,
mapDispatchToProps
),
withAttachLocalAuth,
withData,
excludeIf(
@@ -21,7 +21,10 @@ const withData = withFragments({
});
export default compose(
connect(null, mapDispatchToProps),
connect(
null,
mapDispatchToProps
),
withChangePassword,
withForgotPassword,
withData
Loaded 100 of 148 files, more files were not shown because too many files have changed in this diff. Show more