Skip to content

Commit

Permalink
Merge 2d15885 into 17d74d7
Browse files Browse the repository at this point in the history
  • Loading branch information
MrOrz committed Feb 19, 2018
2 parents 17d74d7 + 2d15885 commit 970ce80
Show file tree
Hide file tree
Showing 11 changed files with 100 additions and 70 deletions.
4 changes: 2 additions & 2 deletions components/CurrentReplies.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ class DeletedItems extends React.Component {
<ul className="items">
{items.map(conn => (
<ReplyConnection
key={conn.get('id')}
key={`${conn.get('articleId')}__${conn.get('replyId')}`}
replyConnection={conn}
onAction={this.handleRestore}
disabled={disabled}
Expand Down Expand Up @@ -123,7 +123,7 @@ export default function CurrentReplies({
{validConnections.map(conn => (
<ReplyConnection
authId={authId}
key={conn.get('id')}
key={`${conn.get('articleId')}__${conn.get('replyId')}`}
replyConnection={conn}
onAction={onDelete}
onVote={onVote}
Expand Down
2 changes: 1 addition & 1 deletion components/ReplyConnection.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ export default class ReplyConnection extends React.PureComponent {

handleAction = () => {
const { replyConnection, onAction } = this.props;
return onAction(replyConnection.get('id'));
return onAction(replyConnection);
};

renderHint = () => {
Expand Down
4 changes: 2 additions & 2 deletions components/ReplyFeedback.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,12 @@ export default class ReplyFeedback extends PureComponent {

handleUpVote = () => {
const { replyConnection, onVote } = this.props;
return onVote(replyConnection.get('id'), 'UPVOTE');
return onVote(replyConnection, 'UPVOTE');
};

handleDownVote = () => {
const { replyConnection, onVote } = this.props;
return onVote(replyConnection.get('id'), 'DOWNVOTE');
return onVote(replyConnection, 'DOWNVOTE');
};

getFeedbackScore = () => {
Expand Down
6 changes: 4 additions & 2 deletions ducks/__tests__/__snapshots__/articleDetail.js.snap
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ Immutable.Map {
},
"replyConnections": Immutable.List [
Immutable.Map {
"id": "article1-reply1",
"articleId": "article1",
"replyId": "reply1",
"canUpdateStatus": true,
"status": "NORMAL",
"reply": Immutable.Map {
Expand Down Expand Up @@ -75,7 +76,8 @@ Immutable.Map {
exports[`reducer: articleDetail handles LOAD_AUTH 1`] = `
Immutable.List [
Immutable.Map {
"id": "article1-reply1",
"articleId": "article1",
"replyId": "reply1",
"canUpdateStatus": true,
"status": "NORMAL",
"reply": Immutable.Map {
Expand Down
62 changes: 35 additions & 27 deletions ducks/articleDetail.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,16 +31,17 @@ const fragments = {
}
}
`,
replyConnectionAndUserFields: `
articleReplyAndUserFields: `
fragment userFields on User {
id
name
avatarUrl
}
fragment replyConnectionFields on ReplyConnection {
id
fragment articleReplyFields on ArticleReply {
canUpdateStatus
status
articleId
replyId
reply {
id
versions(limit: 1) {
Expand Down Expand Up @@ -74,22 +75,22 @@ export const load = id => dispatch => {
GetArticle(id: $id) {
...articleFields
user { ...userFields }
replyConnections { ...replyConnectionFields }
replyConnections: articleReplies { ...articleReplyFields }
relatedArticles(filter: {replyCount: {GT: 0}}) {
edges {
node {
...articleFields
user { ...userFields }
replyCount
replyConnections { ...replyConnectionFields }
replyConnections: articleReplies { ...articleReplyFields }
}
score
}
}
}
}
${fragments.articleFields}
${fragments.replyConnectionAndUserFields}
${fragments.articleReplyAndUserFields}
`({ id }).then(resp => {
dispatch(loadData(resp.getIn(['data', 'GetArticle'])));
dispatch(setState({ key: 'isLoading', value: false }));
Expand All @@ -103,8 +104,9 @@ export const loadAuth = id => dispatch => {
gql`
query($id: String!) {
GetArticle(id: $id) {
replyConnections {
id
replyConnections: articleReplies {
articleId
replyId
canUpdateStatus
}
}
Expand All @@ -123,12 +125,12 @@ const reloadReply = articleId => dispatch =>
gql`
query($id: String!) {
GetArticle(id: $id) {
replyConnections {
...replyConnectionFields
replyConnections: articleReplies {
...articleReplyFields
}
}
}
${fragments.replyConnectionAndUserFields}
${fragments.articleReplyAndUserFields}
`({ id: articleId }).then(resp => {
dispatch(loadData(resp.getIn(['data', 'GetArticle'])));
dispatch(setState({ key: 'isReplyLoading', value: false }));
Expand All @@ -139,7 +141,7 @@ export const connectReply = (articleId, replyId) => dispatch => {
NProgress.start();
return gql`
mutation($articleId: String!, $replyId: String!) {
CreateReplyConnection(articleId: $articleId, replyId: $replyId) {
CreateArticleReply(articleId: $articleId, replyId: $replyId) {
id
}
}
Expand All @@ -149,23 +151,28 @@ export const connectReply = (articleId, replyId) => dispatch => {
});
};

export const updateReplyConnectionStatus = (
export const updateArticleReplyStatus = (
articleId,
replyConnectionId,
replyId,
status
) => dispatch => {
dispatch(setState({ key: 'isReplyLoading', value: true }));
NProgress.start();
return gql`
mutation($replyConnectionId: String!, $status: ReplyConnectionStatusEnum!) {
UpdateReplyConnectionStatus(
replyConnectionId: $replyConnectionId
mutation(
$articleId: String!
$replyId: String!
$status: ArticleReplyStatusEnum!
) {
UpdateArticleReplyStatus(
articleId: $articleId
replyId: $replyId
status: $status
) {
id
}
}
`({ replyConnectionId, status }).then(() => {
`({ articleId, replyId, status }).then(() => {
dispatch(reloadReply(articleId));
NProgress.done();
});
Expand Down Expand Up @@ -196,19 +203,20 @@ export const submitReply = params => dispatch => {
});
};

export const voteReply = (articleId, replyConnectionId, vote) => dispatch => {
export const voteReply = (articleId, replyId, vote) => dispatch => {
dispatch(setState({ key: 'isReplyLoading', value: true }));
NProgress.start();
return gql`
mutation($replyConnectionId: String!, $vote: FeedbackVote!) {
CreateOrUpdateReplyConnectionFeedback(
replyConnectionId: $replyConnectionId
mutation($articleId: String!, $replyId: String!, $vote: FeedbackVote!) {
CreateOrUpdateArticleReplyFeedback(
articleId: $articleId
replyId: $replyId
vote: $vote
) {
feedbackCount
}
}
`({ replyConnectionId, vote }).then(() => {
`({ articleId, replyId, vote }).then(() => {
dispatch(reloadReply(articleId));
NProgress.done();
});
Expand Down Expand Up @@ -236,7 +244,7 @@ export const searchReplies = ({ q }) => dispatch => {
type
createdAt
}
replyConnections {
replyConnections: articleReplies {
article {
id
text
Expand Down Expand Up @@ -285,7 +293,7 @@ export const searchRepiedArticle = ({ q }) => dispatch => {
text
replyCount
createdAt
replyConnections {
replyConnections: articleReplies {
reply {
id
versions {
Expand Down Expand Up @@ -402,11 +410,11 @@ export default createReducer(

[LOAD_AUTH]: (state, { payload }) => {
const idAuthMap = payload.get('replyConnections').reduce((agg, conn) => {
agg[conn.get('id')] = conn;
agg[conn.get('replyId')] = conn;
return agg;
}, {});
return state.updateIn(['data', 'replyConnections'], replyConnections =>
replyConnections.map(conn => conn.merge(idAuthMap[conn.get('id')]))
replyConnections.map(conn => conn.merge(idAuthMap[conn.get('replyId')]))
);
},

Expand Down
18 changes: 12 additions & 6 deletions ducks/fixtures/articleDetail.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ export const loadAction = {
id: 'article1',
replyConnections: [
{
id: 'article1-relatedReply1',
articleId: 'article1',
replyId: 'relatedReply1',
canUpdateStatus: false,
reply: {
id: 'relatedReply1',
Expand All @@ -31,7 +32,8 @@ export const loadAction = {
},
},
{
id: 'article1-relatedReply2',
articleId: 'article1',
replyId: 'relatedReply2',
canUpdateStatus: false,
reply: {
id: 'relatedReply2',
Expand All @@ -44,7 +46,8 @@ export const loadAction = {
},
},
{
id: 'article1-reply1',
articleId: 'article1',
replyId: 'reply1',
canUpdateStatus: false,
reply: {
id: 'reply1', // Already added to article (exists in replyConnections)
Expand All @@ -67,7 +70,8 @@ export const loadAction = {
text: '~~黎建南給退休軍公教人員的一封公開信~~',
replyConnections: [
{
id: 'article2-relatedReply1',
articleId: 'article2',
replyId: 'relatedReply1',
canUpdateStatus: false,
reply: {
// This is duplicated with related article 1
Expand All @@ -88,7 +92,8 @@ export const loadAction = {
replyRequestCount: 1,
replyConnections: [
{
id: 'article1-reply1',
articleId: 'article1',
replyId: 'reply1',
canUpdateStatus: true,
status: 'NORMAL',
reply: {
Expand Down Expand Up @@ -188,7 +193,8 @@ export const loadAuthAction = {
payload: fromJS({
replyConnections: [
{
id: 'AV9mEFX2yCdS-nWhuiPu__AV9mJJ5qyCdS-nWhuiPz',
articleId: 'AV9mEFX2yCdS-nWhuiPu',
replyId: 'AV9mJJ5qyCdS-nWhuiPz',
canUpdateStatus: true,
},
],
Expand Down
38 changes: 23 additions & 15 deletions ducks/replyDetail.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,14 @@ export const load = id => dispatch => {
reference
createdAt
}
replyConnections {
id
replyConnections: articleReplies {
articleId
article {
id
text
replyCount
}
replyId
user {
name
}
Expand All @@ -63,8 +64,9 @@ export const loadAuth = id => dispatch => {
gql`
query($id: String!) {
GetReply(id: $id) {
replyConnections {
id
replyConnections: articleReplies {
articleId
replyId
canUpdateStatus
}
}
Expand All @@ -77,23 +79,28 @@ export const loadAuth = id => dispatch => {
});
};

export const updateReplyConnectionStatus = (
export const updateArticleReplyStatus = (
articleId,
replyId,
replyConnectionId,
status
) => dispatch => {
dispatch(setState({ key: 'isReplyLoading', value: true }));
NProgress.start();
return gql`
mutation($replyConnectionId: String!, $status: ReplyConnectionStatusEnum!) {
UpdateReplyConnectionStatus(
replyConnectionId: $replyConnectionId
mutation(
$articleId: String!
$replyId: String!
$status: ArticleReplyStatusEnum!
) {
UpdateArticleReplyStatus(
articleId: $articleId
replyId: $replyId
status: $status
) {
id
}
}
`({ replyConnectionId, status }).then(() => {
`({ articleId, replyId, status }).then(() => {
// FIXME:
// Immediate load(replyId) will not get updated reply connection status.
// Super wierd.
Expand All @@ -107,19 +114,20 @@ export const updateReplyConnectionStatus = (
});
};

export const voteReply = (replyId, replyConnectionId, vote) => dispatch => {
export const voteReply = (articleId, replyId, vote) => dispatch => {
dispatch(setState({ key: 'isReplyLoading', value: true }));
NProgress.start();
return gql`
mutation($replyConnectionId: String!, $vote: FeedbackVote!) {
CreateOrUpdateReplyConnectionFeedback(
replyConnectionId: $replyConnectionId
mutation($articleId: String!, $replyId: String!, $vote: FeedbackVote!) {
CreateOrUpdateArticleReplyFeedback(
articleId: $articleId
replyId: $replyId
vote: $vote
) {
feedbackCount
}
}
`({ replyConnectionId, vote }).then(() => {
`({ articleId, replyId, vote }).then(() => {
dispatch(load(replyId)).then(() => {
dispatch(setState({ key: 'isReplyLoading', value: false }));
});
Expand Down
2 changes: 1 addition & 1 deletion ducks/replyList.js
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ export const load = ({
type
createdAt
}
replyConnections(status: NORMAL) { id }
replyConnections: articleReplies(status: NORMAL) { replyId }
}
cursor
}
Expand Down
Loading

0 comments on commit 970ce80

Please sign in to comment.