[CORL-294] Moderate a single story + quick search (#2286)

* feat: allow passing a `storyID` to `Query.moderationQueues`

* feat: moderate by story

* feat: implement search story combobox

* feat: add translations

* fix: tests

* fix: duplicate id

* fix: rename file

* chore: add more comments

* fix: add missing translation

* review: use query parameter "q" instead of url path

* chore: move placeholder logic inside, maybe this makes it clearer :-D
This commit is contained in:
Kiwi
2019-04-26 14:23:46 +00:00
committed by Wyatt Johnson
parent a91de05af9
commit ab938985e4
86 changed files with 1934 additions and 319 deletions
@@ -1,7 +1,7 @@
import { GQLAcceptCommentPayloadTypeResolver } from "talk-server/graph/tenant/schema/__generated__/types";
import { moderationQueuesPayloadResolver } from "./ModerationQueues";
import { moderationQueuesResolver } from "./ModerationQueues";
export const AcceptCommentPayload: GQLAcceptCommentPayloadTypeResolver = {
moderationQueues: moderationQueuesPayloadResolver,
moderationQueues: moderationQueuesResolver,
};
@@ -1,6 +1,7 @@
import {
AcceptCommentPayloadToModerationQueuesResolver,
GQLModerationQueuesTypeResolver,
QueryToModerationQueuesResolver,
RejectCommentPayloadToModerationQueuesResolver,
} from "talk-server/graph/tenant/schema/__generated__/types";
import { CommentConnectionInput } from "talk-server/models/comment";
@@ -78,14 +79,16 @@ export const sharedModerationInputResolver = async (
});
/**
* moderationQueuesPayloadResolver implements the resolver that can be used for
* moderation actions payloads.
* moderationQueuesResolver implements the resolver that resolves to the
* shared moderation queues or if `storyID` is provided to the story moderation
* queues.
*
* @param source the source of the payload, not used
* @param args the args of the payload containing potentially a Story ID
* @param ctx the TenantContext for which we can use to retrieve the shared data
*/
export const moderationQueuesPayloadResolver:
export const moderationQueuesResolver:
| QueryToModerationQueuesResolver
| AcceptCommentPayloadToModerationQueuesResolver
| RejectCommentPayloadToModerationQueuesResolver = async (
source,
@@ -1,6 +1,6 @@
import { GQLQueryTypeResolver } from "talk-server/graph/tenant/schema/__generated__/types";
import { sharedModerationInputResolver } from "./ModerationQueues";
import { moderationQueuesResolver } from "./ModerationQueues";
export const Query: Required<GQLQueryTypeResolver<void>> = {
story: (source, args, ctx) => ctx.loaders.Stories.findOrCreate.load(args),
@@ -16,5 +16,5 @@ export const Query: Required<GQLQueryTypeResolver<void>> = {
ctx.loaders.Auth.discoverOIDCConfiguration.load(issuer),
debugScrapeStoryMetadata: (source, { url }, ctx) =>
ctx.loaders.Stories.debugScrapeMetadata.load(url),
moderationQueues: sharedModerationInputResolver,
moderationQueues: moderationQueuesResolver,
};
@@ -1,7 +1,7 @@
import { GQLRejectCommentPayloadTypeResolver } from "talk-server/graph/tenant/schema/__generated__/types";
import { moderationQueuesPayloadResolver } from "./ModerationQueues";
import { moderationQueuesResolver } from "./ModerationQueues";
export const RejectCommentPayload: GQLRejectCommentPayloadTypeResolver = {
moderationQueues: moderationQueuesPayloadResolver,
moderationQueues: moderationQueuesResolver,
};
@@ -2081,9 +2081,10 @@ type Query {
"""
moderationQueues returns the set of ModerationQueues that are available for
all stories.
all stories or if given the story identified by the `storyID`.
"""
moderationQueues: ModerationQueues! @auth(roles: [ADMIN, MODERATOR])
moderationQueues(storyID: ID): ModerationQueues!
@auth(roles: [ADMIN, MODERATOR])
}
################################################################################