From 9d1f03115f851c5a2688238ba6d8aaa0dd03991b Mon Sep 17 00:00:00 2001 From: Wyatt Johnson Date: Fri, 14 Jun 2019 16:27:25 +0000 Subject: [PATCH] [CORL-381] Featured Comments (#2335) * feat: initial serverside featuring support * Update schema.graphql * feat: add feature comment to moderation dropdown * feat: feature comments on the stream embed * fix: tests * fix: optimize loading and fix tests * feat: hide featured tab when empty * feat: introduced flattening * fix: snapshots * fix: spacing * feat: added a dark variant to popover * feat: add featured comments tooltip * fix: better tests * feat: added tag counts * chore: changed string to enum * fix: removed unused translation * fix: changed schema for String -> TAG * feat: split comments -> comments, featuredComments * fix: adapt client to new endpoints * feat: use featured comment counts * test: featured count handling * fix: snapshots and optimistically approve comment during feature * fix: remove unnecessary assertion * feat: approve featured comments * fix: make optimistic update less reliant on existing data --- doczrc.js | 2 +- .../__snapshots__/confirmEmail.spec.tsx.snap | 22 +- .../__snapshots__/resetPassword.spec.tsx.snap | 28 +- .../__snapshots__/Username.spec.tsx.snap | 2 +- .../addEmailAddress.spec.tsx.snap | 82 +- .../createPassword.spec.tsx.snap | 60 +- .../createUsername.spec.tsx.snap | 60 +- .../__snapshots__/restricted.spec.tsx.snap | 48 +- .../signInWithEmail.spec.tsx.snap | 80 +- .../__snapshots__/community.spec.tsx.snap | 52 +- .../__snapshots__/advanced.spec.tsx.snap | 24 +- .../__snapshots__/auth.spec.tsx.snap | 440 +++++------ .../__snapshots__/general.spec.tsx.snap | 110 +-- .../__snapshots__/moderation.spec.tsx.snap | 80 +- .../__snapshots__/organization.spec.tsx.snap | 24 +- .../__snapshots__/wordList.spec.tsx.snap | 32 +- .../decisionHistory.spec.tsx.snap | 54 +- .../__snapshots__/moderate.spec.tsx.snap | 280 +++---- .../__snapshots__/stories.spec.tsx.snap | 20 +- .../addEmailAddress.spec.tsx.snap | 116 +-- .../createPassword.spec.tsx.snap | 58 +- .../createUsername.spec.tsx.snap | 58 +- .../forgotPassword.spec.tsx.snap | 16 +- .../test/__snapshots__/signIn.spec.tsx.snap | 172 ++-- .../test/__snapshots__/signUp.spec.tsx.snap | 306 ++++---- .../lib/relay/createFetchContainer.tsx | 2 + .../lib/relay/createMutationContainer.tsx | 2 +- src/core/client/framework/lib/relay/fetch.tsx | 2 + .../client/framework/lib/relay/mutation.tsx | 2 + .../client/framework/lib/relay/useRefetch.ts | 5 +- .../lib/relay/withLocalStateContainer.tsx | 2 + .../client/framework/testHelpers/byText.ts | 3 + .../framework/testHelpers/denormalize.ts | 16 +- .../client/framework/testHelpers/index.ts | 4 + .../testHelpers/overwriteQueryResolver.ts | 116 +++ src/core/client/stream/App/TabBar.tsx | 8 +- .../client/stream/App/TabBarContainer.tsx | 12 - src/core/client/stream/App/TabBarQuery.tsx | 12 +- .../App/__snapshots__/App.spec.tsx.snap | 2 +- .../stream/common/Timestamp/Timestamp.tsx | 7 +- .../__snapshots__/initLocalState.spec.ts.snap | 5 +- .../client/stream/local/initLocalState.ts | 6 +- src/core/client/stream/local/local.graphql | 9 +- src/core/client/stream/shared/htmlContent.css | 6 + .../stream/tabs/Comments/Comment/Comment.tsx | 8 +- .../Comment/CommentContainer.spec.tsx | 11 - .../Comments/Comment/CommentContainer.tsx | 42 +- .../ModerationDropdown/CaretContainer.tsx | 12 +- .../FeatureCommentMutation.ts | 75 ++ .../ModerationDropdownContainer.css | 4 + .../ModerationDropdownContainer.tsx | 84 +- .../UnfeatureCommentMutation.ts | 69 ++ .../CreateCommentReplyMutation.ts | 4 +- .../tabs/Comments/Comment/RootParent.tsx | 6 +- .../UserIgnorePopoverContainer.css | 1 - .../UserIgnorePopoverContainer.tsx | 39 +- .../Comments/Comment/UserTagsContainer.tsx | 37 + .../Comments/Comment/Username/Username.css | 2 +- .../Comment/Username/Username.spec.tsx | 45 -- .../Comments/Comment/Username/Username.tsx | 16 +- .../__snapshots__/Username.spec.tsx.snap | 17 - .../__snapshots__/Comment.spec.tsx.snap | 4 +- .../CommentContainer.spec.tsx.snap | 451 ++++++----- .../__snapshots__/TopBarLeft.spec.tsx.snap | 4 +- .../stream/tabs/Comments/Comment/index.ts | 1 + .../tabs/Comments/CommentsPane.spec.tsx | 24 - .../stream/tabs/Comments/CommentsPane.tsx | 20 +- .../tabs/Comments/CommentsPaneContainer.tsx | 27 - .../PermalinkView/ConversationThread.spec.tsx | 73 -- .../PermalinkView/ConversationThread.tsx | 131 ---- ...ad.css => ConversationThreadContainer.css} | 0 .../ConversationThreadContainer.tsx | 121 ++- .../PermalinkView/PermalinkViewQuery.tsx | 60 +- .../ConversationThread.spec.tsx.snap | 215 ----- .../AllCommentsTabContainer.tsx | 186 +++++ .../AllCommentsTab/AllCommentsTabQuery.tsx | 93 +++ .../Comments/Stream/AllCommentsTab/index.ts | 1 + .../Stream/FeaturedCommentTooltip.css | 19 + .../Stream/FeaturedCommentTooltip.tsx | 80 ++ .../FeaturedCommentContainer.css | 25 + .../FeaturedCommentContainer.tsx | 148 ++++ .../FeaturedCommentsContainer.tsx | 164 ++++ .../FeaturedCommentsQuery.tsx | 93 +++ .../Comments/Stream/FeaturedComments/index.ts | 4 + .../PostCommentForm/CreateCommentMutation.ts | 4 +- .../stream/tabs/Comments/Stream/SortMenu.tsx | 76 +- .../stream/tabs/Comments/Stream/Stream.css | 3 - .../tabs/Comments/Stream/Stream.spec.tsx | 83 -- .../stream/tabs/Comments/Stream/Stream.tsx | 128 --- .../tabs/Comments/Stream/StreamContainer.css | 28 + .../Comments/Stream/StreamContainer.spec.tsx | 91 --- .../tabs/Comments/Stream/StreamContainer.tsx | 355 ++++----- .../tabs/Comments/Stream/StreamQuery.spec.tsx | 36 - .../tabs/Comments/Stream/StreamQuery.tsx | 73 +- .../__snapshots__/SortMenu.spec.tsx.snap | 182 ++--- .../Stream/__snapshots__/Stream.spec.tsx.snap | 677 ---------------- .../StreamContainer.spec.tsx.snap | 296 ------- .../__snapshots__/StreamQuery.spec.tsx.snap | 26 - .../__snapshots__/CommentsPane.spec.tsx.snap | 5 - src/core/client/stream/tabs/Comments/index.ts | 5 +- .../client/stream/tabs/Profile/Profile.tsx | 15 +- .../client/stream/test/comments/create.ts | 3 +- .../renderFeaturedStream.spec.tsx.snap | 491 ++++++++++++ .../stream/test/comments/featured/create.ts | 15 + .../test/comments/featured/loadMore.spec.tsx | 99 +++ .../featured/renderFeaturedStream.spec.tsx | 56 ++ .../__snapshots__/permalinkView.spec.tsx.snap | 134 ++-- ...permalinkViewCommentNotFound.spec.tsx.snap | 22 +- ...permalinkViewLoadMoreParents.spec.tsx.snap | 122 +-- .../stream/test/comments/permalink/create.ts | 30 + .../comments/permalink/permalinkView.spec.tsx | 17 +- .../permalinkViewCommentNotFound.spec.tsx | 17 +- .../permalinkViewLoadMoreParents.spec.tsx | 2 +- .../permalink/permalinkViewPostReply.spec.tsx | 2 +- .../__snapshots__/editComment.spec.tsx.snap | 128 +-- .../__snapshots__/loadMore.spec.tsx.snap | 50 +- .../__snapshots__/postComment.spec.tsx.snap | 22 +- .../postLocalReply.spec.tsx.snap | 222 +++--- .../__snapshots__/postReply.spec.tsx.snap | 66 +- .../renderCommunityGuidelines.spec.tsx.snap | 736 ++++++++++-------- .../renderMessageBox.spec.tsx.snap | 534 +++++++++++-- .../__snapshots__/renderReplies.spec.tsx.snap | 100 +-- .../__snapshots__/renderStream.spec.tsx.snap | 734 +++++++++-------- .../__snapshots__/reportComment.spec.tsx.snap | 44 +- .../showAllReplies.spec.tsx.snap | 26 +- .../showConversation.spec.tsx.snap | 22 +- .../__snapshots__/sortStream.spec.tsx.snap | 50 +- .../test/comments/stream/banned.spec.tsx | 2 +- .../stream/charCountEditComment.spec.tsx | 40 +- .../stream/charCountPostComment.spec.tsx | 40 +- .../stream/charCountReplyComment.spec.tsx | 40 +- .../closedOrDisabledCommentStream.spec.tsx | 2 +- .../stream/test/comments/stream/create.ts | 31 + .../test/comments/stream/editComment.spec.tsx | 2 +- .../test/comments/stream/ignoreUser.spec.tsx | 2 +- .../test/comments/stream/loadMore.spec.tsx | 78 +- .../test/comments/stream/memberSince.spec.tsx | 2 +- .../test/comments/stream/moderation.spec.tsx | 75 +- .../test/comments/stream/postComment.spec.tsx | 50 +- .../comments/stream/postLocalReply.spec.tsx | 2 +- .../test/comments/stream/postReply.spec.tsx | 2 +- .../test/comments/stream/reaction.spec.tsx | 2 +- .../stream/renderCommunityGuidelines.spec.tsx | 2 +- .../comments/stream/renderMessageBox.spec.tsx | 2 +- .../comments/stream/renderReplies.spec.tsx | 2 +- .../comments/stream/renderStream.spec.tsx | 2 +- .../comments/stream/reportComment.spec.tsx | 2 +- .../comments/stream/showAllReplies.spec.tsx | 2 +- .../comments/stream/showConversation.spec.tsx | 17 +- .../test/comments/stream/sortStream.spec.tsx | 45 +- .../renderConfigure.spec.tsx.snap | 38 +- src/core/client/stream/test/fixtures.ts | 37 +- .../__snapshots__/myComments.spec.tsx.snap | 20 +- src/core/client/ui/components/Box/Box.css | 240 ++++++ src/core/client/ui/components/Box/Box.mdx | 30 + src/core/client/ui/components/Box/Box.tsx | 164 ++++ src/core/client/ui/components/Box/index.ts | 1 + .../client/ui/components/Button/Button.css | 2 +- .../client/ui/components/CallOut/CallOut.tsx | 2 +- .../__snapshots__/CallOut.spec.tsx.snap | 4 +- .../client/ui/components/Counter/Counter.css | 30 +- .../client/ui/components/Counter/Counter.mdx | 15 + .../client/ui/components/Counter/Counter.tsx | 7 +- .../__snapshots__/Counter.spec.tsx.snap | 2 + .../client/ui/components/Dropdown/Button.tsx | 2 +- src/core/client/ui/components/Flex/Flex.css | 375 ++++++++- src/core/client/ui/components/Flex/Flex.mdx | 55 +- src/core/client/ui/components/Flex/Flex.tsx | 25 +- .../Flex/__snapshots__/Flex.spec.tsx.snap | 10 +- .../__snapshots__/FormField.spec.tsx.snap | 8 +- .../HorizontalGutter/HorizontalGutter.mdx | 36 +- .../HorizontalGutter/HorizontalGutter.tsx | 21 +- .../HorizontalGutter.spec.tsx.snap | 4 +- .../InputDescription.spec.tsx.snap | 2 +- .../__snapshots__/InputLabel.spec.tsx.snap | 2 +- .../client/ui/components/Popover/Arrow.css | 40 + .../client/ui/components/Popover/Arrow.tsx | 21 +- .../client/ui/components/Popover/Popover.css | 5 + .../client/ui/components/Popover/Popover.mdx | 33 +- .../client/ui/components/Popover/Popover.tsx | 7 +- .../__snapshots__/RadioButton.spec.tsx.snap | 2 +- src/core/client/ui/components/Tabs/Tab.css | 2 + src/core/client/ui/components/Tag/Tag.css | 35 +- src/core/client/ui/components/Tag/Tag.mdx | 20 +- src/core/client/ui/components/Tag/Tag.tsx | 17 +- .../Tag/__snapshots__/Tag.spec.tsx.snap | 2 +- .../ui/components/Typography/Typography.mdx | 34 +- .../ui/components/Typography/Typography.tsx | 19 +- .../__snapshots__/Typography.spec.tsx.snap | 2 +- src/core/client/ui/components/index.ts | 1 + src/core/client/ui/shared/buttonReset.css | 4 - src/core/client/ui/shared/typography.css | 13 +- src/core/client/ui/theme/variables.ts | 3 + src/core/server/errors/index.ts | 9 +- .../extensions/ErrorWrappingExtension.ts | 7 + .../server/graph/tenant/loaders/Comments.ts | 49 +- .../server/graph/tenant/mutators/Comments.ts | 37 +- src/core/server/graph/tenant/mutators/util.ts | 7 + .../graph/tenant/resolvers/CommentCounts.ts | 15 +- .../server/graph/tenant/resolvers/Mutation.ts | 16 + .../server/graph/tenant/resolvers/Story.ts | 6 +- src/core/server/graph/tenant/resolvers/Tag.ts | 14 +- .../server/graph/tenant/schema/schema.graphql | 118 ++- src/core/server/locales/en-US/tags.ftl | 2 - src/core/server/locales/pt-BR/tags.ftl | 2 - src/core/server/models/comment/helpers.ts | 13 +- src/core/server/models/comment/index.ts | 191 ++++- src/core/server/models/comment/tag.ts | 28 +- src/core/server/models/user/index.ts | 1 + src/core/server/services/comments/index.ts | 54 ++ .../comments/pipeline/phases/staff.ts | 4 +- src/locales/en-US/stream.ftl | 27 +- src/locales/pt-BR/stream.ftl | 5 +- 213 files changed, 7744 insertions(+), 5387 deletions(-) create mode 100644 src/core/client/framework/testHelpers/overwriteQueryResolver.ts create mode 100644 src/core/client/stream/tabs/Comments/Comment/ModerationDropdown/FeatureCommentMutation.ts create mode 100644 src/core/client/stream/tabs/Comments/Comment/ModerationDropdown/UnfeatureCommentMutation.ts create mode 100644 src/core/client/stream/tabs/Comments/Comment/UserTagsContainer.tsx delete mode 100644 src/core/client/stream/tabs/Comments/Comment/Username/Username.spec.tsx delete mode 100644 src/core/client/stream/tabs/Comments/Comment/Username/__snapshots__/Username.spec.tsx.snap delete mode 100644 src/core/client/stream/tabs/Comments/CommentsPane.spec.tsx delete mode 100644 src/core/client/stream/tabs/Comments/CommentsPaneContainer.tsx delete mode 100644 src/core/client/stream/tabs/Comments/PermalinkView/ConversationThread.spec.tsx delete mode 100644 src/core/client/stream/tabs/Comments/PermalinkView/ConversationThread.tsx rename src/core/client/stream/tabs/Comments/PermalinkView/{ConversationThread.css => ConversationThreadContainer.css} (100%) delete mode 100644 src/core/client/stream/tabs/Comments/PermalinkView/__snapshots__/ConversationThread.spec.tsx.snap create mode 100644 src/core/client/stream/tabs/Comments/Stream/AllCommentsTab/AllCommentsTabContainer.tsx create mode 100644 src/core/client/stream/tabs/Comments/Stream/AllCommentsTab/AllCommentsTabQuery.tsx create mode 100644 src/core/client/stream/tabs/Comments/Stream/AllCommentsTab/index.ts create mode 100644 src/core/client/stream/tabs/Comments/Stream/FeaturedCommentTooltip.css create mode 100644 src/core/client/stream/tabs/Comments/Stream/FeaturedCommentTooltip.tsx create mode 100644 src/core/client/stream/tabs/Comments/Stream/FeaturedComments/FeaturedCommentContainer.css create mode 100644 src/core/client/stream/tabs/Comments/Stream/FeaturedComments/FeaturedCommentContainer.tsx create mode 100644 src/core/client/stream/tabs/Comments/Stream/FeaturedComments/FeaturedCommentsContainer.tsx create mode 100644 src/core/client/stream/tabs/Comments/Stream/FeaturedComments/FeaturedCommentsQuery.tsx create mode 100644 src/core/client/stream/tabs/Comments/Stream/FeaturedComments/index.ts delete mode 100644 src/core/client/stream/tabs/Comments/Stream/Stream.css delete mode 100644 src/core/client/stream/tabs/Comments/Stream/Stream.spec.tsx delete mode 100644 src/core/client/stream/tabs/Comments/Stream/Stream.tsx create mode 100644 src/core/client/stream/tabs/Comments/Stream/StreamContainer.css delete mode 100644 src/core/client/stream/tabs/Comments/Stream/StreamContainer.spec.tsx delete mode 100644 src/core/client/stream/tabs/Comments/Stream/StreamQuery.spec.tsx delete mode 100644 src/core/client/stream/tabs/Comments/Stream/__snapshots__/Stream.spec.tsx.snap delete mode 100644 src/core/client/stream/tabs/Comments/Stream/__snapshots__/StreamContainer.spec.tsx.snap delete mode 100644 src/core/client/stream/tabs/Comments/Stream/__snapshots__/StreamQuery.spec.tsx.snap delete mode 100644 src/core/client/stream/tabs/Comments/__snapshots__/CommentsPane.spec.tsx.snap create mode 100644 src/core/client/stream/test/comments/featured/__snapshots__/renderFeaturedStream.spec.tsx.snap create mode 100644 src/core/client/stream/test/comments/featured/create.ts create mode 100644 src/core/client/stream/test/comments/featured/loadMore.spec.tsx create mode 100644 src/core/client/stream/test/comments/featured/renderFeaturedStream.spec.tsx create mode 100644 src/core/client/stream/test/comments/permalink/create.ts create mode 100644 src/core/client/stream/test/comments/stream/create.ts create mode 100644 src/core/client/ui/components/Box/Box.css create mode 100644 src/core/client/ui/components/Box/Box.mdx create mode 100644 src/core/client/ui/components/Box/Box.tsx create mode 100644 src/core/client/ui/components/Box/index.ts delete mode 100644 src/core/server/locales/en-US/tags.ftl delete mode 100644 src/core/server/locales/pt-BR/tags.ftl diff --git a/doczrc.js b/doczrc.js index 45cfc59f8..5ed9a64f4 100644 --- a/doczrc.js +++ b/doczrc.js @@ -32,7 +32,7 @@ export default { config.module.rules.push({ test: /\.css\.ts$/, use: [ - isProduction ? MiniCssExtractPlugin.loader : styleLoader, + styleLoader, { loader: require.resolve("css-loader"), options: { diff --git a/src/core/client/account/test/__snapshots__/confirmEmail.spec.tsx.snap b/src/core/client/account/test/__snapshots__/confirmEmail.spec.tsx.snap index f877b4620..2250b6180 100644 --- a/src/core/client/account/test/__snapshots__/confirmEmail.spec.tsx.snap +++ b/src/core/client/account/test/__snapshots__/confirmEmail.spec.tsx.snap @@ -16,24 +16,24 @@ exports[`renders form 1`] = ` onSubmit={[Function]} >

Email Confirmation

Click below to confirm your email address.

diff --git a/src/core/client/account/test/__snapshots__/resetPassword.spec.tsx.snap b/src/core/client/account/test/__snapshots__/resetPassword.spec.tsx.snap index 65daa478f..834696f42 100644 --- a/src/core/client/account/test/__snapshots__/resetPassword.spec.tsx.snap +++ b/src/core/client/account/test/__snapshots__/resetPassword.spec.tsx.snap @@ -16,37 +16,37 @@ exports[`renders form 1`] = ` onSubmit={[Function]} >

Reset your password

Please enter a new password to use to sign in to your account. Make sure it is unique and be sure to keep it secure.

Must be at least 8 characters

@@ -113,19 +113,21 @@ exports[`renders missing reset token 1`] = ` className="MainLayout-centered" >

Oops Sorry!

- - The Reset Token seems to be missing. - +
+ + The Reset Token seems to be missing. + +
diff --git a/src/core/client/admin/routes/Moderate/ModerateCard/__snapshots__/Username.spec.tsx.snap b/src/core/client/admin/routes/Moderate/ModerateCard/__snapshots__/Username.spec.tsx.snap index c844793c9..d994d2a07 100644 --- a/src/core/client/admin/routes/Moderate/ModerateCard/__snapshots__/Username.spec.tsx.snap +++ b/src/core/client/admin/routes/Moderate/ModerateCard/__snapshots__/Username.spec.tsx.snap @@ -2,7 +2,7 @@ exports[`renders correctly 1`] = ` Marvin diff --git a/src/core/client/admin/test/auth/__snapshots__/addEmailAddress.spec.tsx.snap b/src/core/client/admin/test/auth/__snapshots__/addEmailAddress.spec.tsx.snap index 8303e34e9..c37f91301 100644 --- a/src/core/client/admin/test/auth/__snapshots__/addEmailAddress.spec.tsx.snap +++ b/src/core/client/admin/test/auth/__snapshots__/addEmailAddress.spec.tsx.snap @@ -6,18 +6,18 @@ exports[`accepts valid email 1`] = ` onSubmit={[Function]} >

For your added security, we require users to add an email address to their accounts.