Implement LocalReplyListContainer

This commit is contained in:
Chi Vinh Le
2018-09-22 00:55:55 +02:00
parent 65156c0528
commit 4107fd367f
4 changed files with 76 additions and 4 deletions
@@ -21,6 +21,7 @@ type AuthPopup {
extend type Comment {
pending: Boolean
localReplies: CommentsConnection
}
type Local {
@@ -17,9 +17,9 @@ export interface ReplyListProps {
comments: ReadonlyArray<
{ id: string } & PropTypesOf<typeof CommentContainer>["comment"]
>;
onShowAll: () => void;
hasMore: boolean;
disableShowAll: boolean;
onShowAll?: () => void;
hasMore?: boolean;
disableShowAll?: boolean;
indentLevel?: number;
ReplyListComponent?: React.ComponentType<any>;
}
@@ -0,0 +1,63 @@
import React, { Component } from "react";
import { graphql } from "react-relay";
import withFragmentContainer from "talk-framework/lib/relay/withFragmentContainer";
import { PropTypesOf } from "talk-framework/types";
import { LocalReplyListContainer_asset as AssetData } from "talk-stream/__generated__/LocalReplyListContainer_asset.graphql";
import { LocalReplyListContainer_comment as CommentData } from "talk-stream/__generated__/LocalReplyListContainer_comment.graphql";
import { LocalReplyListContainer_me as MeData } from "talk-stream/__generated__/LocalReplyListContainer_me.graphql";
import ReplyList from "../components/ReplyList";
interface InnerProps {
indentLevel: number;
me: MeData;
asset: AssetData;
comment: CommentData;
}
export class LocalReplyListContainer extends Component<InnerProps> {
public render() {
if (!this.props.comment.localReplies) {
return null;
}
return (
<ReplyList
me={this.props.me}
comment={this.props.comment}
comments={this.props.comment.localReplies.edges.map(e => e.node)}
asset={this.props.asset}
indentLevel={this.props.indentLevel}
/>
);
}
}
const enhanced = withFragmentContainer<InnerProps>({
me: graphql`
fragment LocalReplyListContainer_me on User {
...CommentContainer_me
}
`,
asset: graphql`
fragment LocalReplyListContainer_asset on Asset {
...CommentContainer_asset
}
`,
comment: graphql`
fragment LocalReplyListContainer_comment on Comment {
id
localReplies {
edges {
node {
id
...CommentContainer_comment
}
}
}
}
`,
})(LocalReplyListContainer);
export type LocalReplyListContainerProps = PropTypesOf<typeof enhanced>;
export default enhanced;
@@ -3,6 +3,7 @@ import { graphql, GraphQLTaggedNode, RelayPaginationProp } from "react-relay";
import { withProps } from "recompose";
import { withPaginationContainer } from "talk-framework/lib/relay";
import { PropTypesOf } from "talk-framework/types";
import { ReplyListContainer1_asset as AssetData } from "talk-stream/__generated__/ReplyListContainer1_asset.graphql";
import { ReplyListContainer1_comment as CommentData } from "talk-stream/__generated__/ReplyListContainer1_comment.graphql";
import { ReplyListContainer1_me as MeData } from "talk-stream/__generated__/ReplyListContainer1_me.graphql";
@@ -12,6 +13,7 @@ import {
} from "talk-stream/__generated__/ReplyListContainer1PaginationQuery.graphql";
import ReplyList from "../components/ReplyList";
import LocalReplyListContainer from "./LocalReplyListContainer";
export interface InnerProps {
me: MeData | null;
@@ -121,11 +123,13 @@ const ReplyListContainer5 = createReplyListContainer(
me: graphql`
fragment ReplyListContainer5_me on User {
...CommentContainer_me
...LocalReplyListContainer_me
}
`,
asset: graphql`
fragment ReplyListContainer5_asset on Asset {
...CommentContainer_asset
...LocalReplyListContainer_asset
}
`,
comment: graphql`
@@ -142,6 +146,7 @@ const ReplyListContainer5 = createReplyListContainer(
node {
id
...CommentContainer_comment
...LocalReplyListContainer_comment
}
}
}
@@ -162,7 +167,10 @@ const ReplyListContainer5 = createReplyListContainer(
@arguments(count: $count, cursor: $cursor, orderBy: $orderBy)
}
}
`
`,
(props: PropTypesOf<typeof LocalReplyListContainer>) => (
<LocalReplyListContainer {...props} indentLevel={6} />
)
);
const ReplyListContainer4 = createReplyListContainer(