[CORL-139, CORL-140] Community (#2239)

* feat: Add table ui component

* feat: community user table

* feat: filters and role change

* fix: add some comments

* fix: user viewer

* fix: snapshots

* test: add tests

* fix: better popover experience

* fix: test

* chore: use enum

* feat: prevent server side setting your own role

* fix: cleanup
This commit is contained in:
Kiwi
2019-03-22 20:13:11 +00:00
committed by Wyatt Johnson
parent e70f6f5c7f
commit 538e1fca9d
76 changed files with 2016 additions and 179 deletions
@@ -5,14 +5,14 @@ import {
RecordSourceSelectorProxy,
} from "relay-runtime";
import { getMeSourceID } from "talk-framework/helpers";
import { getViewerSourceID } from "talk-framework/helpers";
export default function prependCommentEdgeToProfile(
environment: Environment,
store: RecordSourceSelectorProxy,
commentEdge: RecordProxy
) {
const meProxy = store.get(getMeSourceID(environment)!);
const meProxy = store.get(getViewerSourceID(environment)!);
const con = ConnectionHandler.getConnection(
meProxy,
"CommentHistory_comments"
@@ -2,7 +2,7 @@ import sinon from "sinon";
import { waitForElement, within } from "talk-framework/testHelpers";
import { meAsModerator, settings, stories } from "../fixtures";
import { settings, stories, viewerAsModerator } from "../fixtures";
import create from "./create";
async function createTestRenderer(
@@ -14,7 +14,7 @@ async function createTestRenderer(
Query: {
settings: sinon.stub().returns(settings),
story: sinon.stub().returns(stories[0]),
viewer: sinon.stub().returns(meAsModerator),
viewer: sinon.stub().returns(viewerAsModerator),
...resolver.Query,
},
};
@@ -2,7 +2,7 @@ import sinon from "sinon";
import { waitForElement, within } from "talk-framework/testHelpers";
import { meAsModerator, settings, stories } from "../fixtures";
import { settings, stories, viewerAsModerator } from "../fixtures";
import create from "./create";
async function createTestRenderer(
@@ -16,7 +16,7 @@ async function createTestRenderer(
expectAndFail(variables).toEqual({ id: stories[0].id, url: null });
return stories[0];
}),
viewer: sinon.stub().returns(meAsModerator),
viewer: sinon.stub().returns(viewerAsModerator),
...resolver.Query,
},
...resolver,
@@ -8,7 +8,7 @@ import {
within,
} from "talk-framework/testHelpers";
import { meAsModerator, settings, stories } from "../fixtures";
import { settings, stories, viewerAsModerator } from "../fixtures";
import create from "./create";
async function createTestRenderer(
@@ -22,7 +22,7 @@ async function createTestRenderer(
expectAndFail(variables).toEqual({ id: stories[0].id, url: null });
return stories[0];
}),
viewer: sinon.stub().returns(meAsModerator),
viewer: sinon.stub().returns(viewerAsModerator),
...resolver.Query,
},
...resolver,
+12 -9
View File
@@ -1,7 +1,7 @@
import { EventEmitter2 } from "eventemitter2";
import { IResolvers } from "graphql-tools";
import React from "react";
import TestRenderer from "react-test-renderer";
import TestRenderer, { ReactTestRenderer } from "react-test-renderer";
import { Environment, RecordProxy, RecordSourceProxy } from "relay-runtime";
import { TalkContext, TalkContextProvider } from "talk-framework/lib/bootstrap";
@@ -42,6 +42,7 @@ export default function create(params: CreateParams) {
const context: TalkContext = {
relayEnvironment: environment,
locales: ["en-US"],
localeBundles: [createFluentBundle()],
localStorage: createPromisifiedStorage(),
sessionStorage: createPromisifiedStorage(),
@@ -53,12 +54,14 @@ export default function create(params: CreateParams) {
clearSession: () => Promise.resolve(),
};
const testRenderer = TestRenderer.create(
<TalkContextProvider value={context}>
<AppContainer />
</TalkContextProvider>,
{ createNodeMock }
);
return { context, testRenderer };
let testRenderer: ReactTestRenderer;
TestRenderer.act(() => {
testRenderer = TestRenderer.create(
<TalkContextProvider value={context}>
<AppContainer />
</TalkContextProvider>,
{ createNodeMock }
);
});
return { context, testRenderer: testRenderer! };
}
+2 -2
View File
@@ -396,13 +396,13 @@ export const storyWithDeepestReplies = denormalizeStory({
},
});
export const meAsModerator = {
export const viewerAsModerator = {
id: "me-as-moderator",
username: "Moderator",
role: "MODERATOR",
};
export const meWithComments = {
export const viewerWithComments = {
id: "me-with-comments",
username: "Markus",
role: "COMMENTER",
@@ -8,13 +8,13 @@ import {
within,
} from "talk-framework/testHelpers";
import { comments, meWithComments, settings, stories } from "../fixtures";
import { comments, settings, stories, viewerWithComments } from "../fixtures";
import create from "./create";
let testRenderer: ReactTestRenderer;
beforeEach(() => {
const meStub = {
...meWithComments,
...viewerWithComments,
comments: createSinonStub(
s => s.throws(),
s =>
@@ -7,7 +7,7 @@ import {
within,
} from "talk-framework/testHelpers";
import { meWithComments, settings, stories } from "../fixtures";
import { settings, stories, viewerWithComments } from "../fixtures";
import create from "./create";
let testRenderer: ReactTestRenderer;
@@ -22,7 +22,7 @@ beforeEach(() => {
.withArgs(undefined, { id: stories[0].id, url: null })
.returns(stories[0])
),
viewer: sinon.stub().returns(meWithComments),
viewer: sinon.stub().returns(viewerWithComments),
},
};