mirror of
https://github.com/wassname/talk.git
synced 2026-08-05 13:30:26 +08:00
[CORL-423] Rearrange client files and folder (#2352)
* chore: reorganize account * chore: reorganize install * chore: reorganize auth files * chore: reorganize admin files * fix: graphql naming * chore: adapt account routing
This commit is contained in:
+2
-2
@@ -25,7 +25,7 @@ const Router = createFarceRouter({
|
||||
),
|
||||
});
|
||||
|
||||
const EntryContainer: FunctionComponent = () => (
|
||||
const App: FunctionComponent = () => (
|
||||
<CoralContextConsumer>
|
||||
{({ relayEnvironment }) => (
|
||||
<Router resolver={new Resolver(relayEnvironment)} />
|
||||
@@ -33,4 +33,4 @@ const EntryContainer: FunctionComponent = () => (
|
||||
</CoralContextConsumer>
|
||||
);
|
||||
|
||||
export default EntryContainer;
|
||||
export default App;
|
||||
+1
-1
@@ -2,7 +2,7 @@ import React, { FunctionComponent } from "react";
|
||||
|
||||
import { PropTypesOf } from "coral-framework/types";
|
||||
|
||||
import DecisionHistoryItemContainer from "../containers/DecisionHistoryItemContainer";
|
||||
import DecisionHistoryItemContainer from "./DecisionHistoryItemContainer";
|
||||
import DecisionList from "./DecisionList";
|
||||
import Empty from "./Empty";
|
||||
import Main from "./Main";
|
||||
+1
-1
@@ -3,7 +3,7 @@ import React, { FunctionComponent } from "react";
|
||||
|
||||
import { BaseButton, ClickOutside, Icon, Popover } from "coral-ui/components";
|
||||
|
||||
import DecisionHistoryQuery from "../views/decisionHistory/queries/DecisionHistoryQuery";
|
||||
import DecisionHistoryQuery from "./DecisionHistoryQuery";
|
||||
|
||||
import styles from "./DecisionHistoryButton.css";
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@ import { DecisionHistoryContainer_viewer as ViewerData } from "coral-admin/__gen
|
||||
import { DecisionHistoryContainerPaginationQueryVariables } from "coral-admin/__generated__/DecisionHistoryContainerPaginationQuery.graphql";
|
||||
import { withPaginationContainer } from "coral-framework/lib/relay";
|
||||
|
||||
import DecisionHistory from "../components/DecisionHistory";
|
||||
import DecisionHistory from "./DecisionHistory";
|
||||
|
||||
interface DecisionHistoryContainerProps {
|
||||
viewer: ViewerData;
|
||||
+2
-2
@@ -4,8 +4,8 @@ import { graphql } from "react-relay";
|
||||
import { DecisionHistoryItemContainer_action as ActionData } from "coral-admin/__generated__/DecisionHistoryItemContainer_action.graphql";
|
||||
import { withFragmentContainer } from "coral-framework/lib/relay";
|
||||
|
||||
import ApprovedComment from "../components/ApprovedComment";
|
||||
import RejectedComment from "../components/RejectedComment";
|
||||
import ApprovedComment from "./ApprovedComment";
|
||||
import RejectedComment from "./RejectedComment";
|
||||
|
||||
interface DecisionHistoryItemContainerProps {
|
||||
action: ActionData;
|
||||
+2
-2
@@ -3,8 +3,8 @@ import React, { Component } from "react";
|
||||
|
||||
import { DecisionHistoryQuery as QueryTypes } from "coral-admin/__generated__/DecisionHistoryQuery.graphql";
|
||||
|
||||
import DecisionHistoryLoading from "../components/DecisionHistoryLoading";
|
||||
import DecisionHistoryContainer from "../containers/DecisionHistoryContainer";
|
||||
import DecisionHistoryContainer from "./DecisionHistoryContainer";
|
||||
import DecisionHistoryLoading from "./DecisionHistoryLoading";
|
||||
|
||||
interface Props {
|
||||
onClosePopover: () => void;
|
||||
@@ -0,0 +1,4 @@
|
||||
export {
|
||||
default,
|
||||
default as DecisionHistoryButton,
|
||||
} from "./DecisionHistoryButton";
|
||||
+4
-4
@@ -4,17 +4,17 @@ import { createRenderer } from "react-test-renderer/shallow";
|
||||
|
||||
import { PropTypesOf } from "coral-framework/types";
|
||||
|
||||
import App from "./App";
|
||||
import Main from "./Main";
|
||||
|
||||
const AppN = removeFragmentRefs(App);
|
||||
const MainN = removeFragmentRefs(Main);
|
||||
|
||||
it("renders correctly", () => {
|
||||
const props: PropTypesOf<typeof AppN> = {
|
||||
const props: PropTypesOf<typeof MainN> = {
|
||||
viewer: {},
|
||||
children: "child",
|
||||
};
|
||||
const renderer = createRenderer();
|
||||
|
||||
renderer.render(<AppN {...props} />);
|
||||
renderer.render(<MainN {...props} />);
|
||||
expect(renderer.getRenderOutput()).toMatchSnapshot();
|
||||
});
|
||||
@@ -4,12 +4,12 @@ import { PropTypesOf } from "coral-framework/types";
|
||||
import { Logo } from "coral-ui/components";
|
||||
import { AppBar, Begin, Divider, End } from "coral-ui/components/AppBar";
|
||||
|
||||
import NavigationContainer from "../containers/NavigationContainer";
|
||||
import UserMenuContainer from "../containers/UserMenuContainer";
|
||||
import DecisionHistoryButton from "./DecisionHistoryButton";
|
||||
import { DecisionHistoryButton } from "./DecisionHistory";
|
||||
import NavigationContainer from "./Navigation";
|
||||
import UserMenuContainer from "./UserMenu";
|
||||
import Version from "./Version";
|
||||
|
||||
import styles from "./App.css";
|
||||
import styles from "./Main.css";
|
||||
|
||||
interface Props {
|
||||
viewer: PropTypesOf<typeof UserMenuContainer>["viewer"] &
|
||||
@@ -17,7 +17,7 @@ interface Props {
|
||||
children: React.ReactNode;
|
||||
}
|
||||
|
||||
const App: FunctionComponent<Props> = ({ children, viewer }) => (
|
||||
const Main: FunctionComponent<Props> = ({ children, viewer }) => (
|
||||
<div className={styles.root}>
|
||||
<AppBar gutterBegin gutterEnd>
|
||||
<Begin itemGutter="double">
|
||||
@@ -37,4 +37,4 @@ const App: FunctionComponent<Props> = ({ children, viewer }) => (
|
||||
</div>
|
||||
);
|
||||
|
||||
export default App;
|
||||
export default Main;
|
||||
+8
-8
@@ -1,35 +1,35 @@
|
||||
import React from "react";
|
||||
|
||||
import { AppContainerQueryResponse } from "coral-admin/__generated__/AppContainerQuery.graphql";
|
||||
import { MainRouteQueryResponse } from "coral-admin/__generated__/MainRouteQuery.graphql";
|
||||
|
||||
import { graphql } from "coral-framework/lib/relay";
|
||||
import { withRouteConfig } from "coral-framework/lib/router";
|
||||
|
||||
import App from "../components/App";
|
||||
import Main from "./Main";
|
||||
|
||||
interface Props {
|
||||
data: AppContainerQueryResponse | null;
|
||||
data: MainRouteQueryResponse | null;
|
||||
}
|
||||
|
||||
class AppContainer extends React.Component<Props> {
|
||||
class MainRoute extends React.Component<Props> {
|
||||
public render() {
|
||||
return (
|
||||
<App viewer={this.props.data && this.props.data.viewer}>
|
||||
<Main viewer={this.props.data && this.props.data.viewer}>
|
||||
{this.props.children}
|
||||
</App>
|
||||
</Main>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const enhanced = withRouteConfig<Props>({
|
||||
query: graphql`
|
||||
query AppContainerQuery {
|
||||
query MainRouteQuery {
|
||||
viewer {
|
||||
...UserMenuContainer_viewer
|
||||
...NavigationContainer_viewer
|
||||
}
|
||||
}
|
||||
`,
|
||||
})(AppContainer);
|
||||
})(MainRoute);
|
||||
|
||||
export default enhanced;
|
||||
+1
-1
@@ -8,7 +8,7 @@ import {
|
||||
withSignOutMutation,
|
||||
} from "coral-framework/mutations";
|
||||
|
||||
import Navigation from "../components/Navigation";
|
||||
import Navigation from "./Navigation";
|
||||
|
||||
interface Props {
|
||||
signOut: SignOutMutation;
|
||||
@@ -0,0 +1 @@
|
||||
export { default, default as NavigationContainer } from "./NavigationContainer";
|
||||
+1
-1
@@ -7,7 +7,7 @@ import {
|
||||
withSignOutMutation,
|
||||
} from "coral-framework/mutations";
|
||||
|
||||
import UserMenu from "../components/UserMenu";
|
||||
import UserMenu from "./UserMenu";
|
||||
|
||||
interface Props {
|
||||
signOut: SignOutMutation;
|
||||
@@ -0,0 +1 @@
|
||||
export { default, default as UserMenuContainer } from "./UserMenuContainer";
|
||||
+2
-2
@@ -2,7 +2,7 @@
|
||||
|
||||
exports[`renders correctly 1`] = `
|
||||
<div
|
||||
className="App-root"
|
||||
className="Main-root"
|
||||
>
|
||||
<withPropsOnChange(AppBar)
|
||||
gutterBegin={true}
|
||||
@@ -12,7 +12,7 @@ exports[`renders correctly 1`] = `
|
||||
itemGutter="double"
|
||||
>
|
||||
<div
|
||||
className="App-logoContainer"
|
||||
className="Main-logoContainer"
|
||||
>
|
||||
<withPropsOnChange(Logo) />
|
||||
<Version />
|
||||
@@ -0,0 +1 @@
|
||||
export { default, default as App } from "./App";
|
||||
@@ -1,4 +0,0 @@
|
||||
export {
|
||||
default as DiscoverOIDCConfigurationFetch,
|
||||
} from "./DiscoverOIDCConfigurationQuery";
|
||||
export { default as SearchStoryFetch } from "./SearchStoryQuery";
|
||||
@@ -2,7 +2,7 @@ import { createManaged } from "coral-framework/lib/bootstrap";
|
||||
import React, { FunctionComponent } from "react";
|
||||
import ReactDOM from "react-dom";
|
||||
|
||||
import EntryContainer from "./containers/EntryContainer";
|
||||
import App from "./App";
|
||||
import { initLocalState } from "./local";
|
||||
import localesData from "./locales";
|
||||
|
||||
@@ -18,7 +18,7 @@ async function main() {
|
||||
|
||||
const Index: FunctionComponent = () => (
|
||||
<ManagedCoralContextProvider>
|
||||
<EntryContainer />
|
||||
<App />
|
||||
</ManagedCoralContextProvider>
|
||||
);
|
||||
|
||||
|
||||
@@ -1,19 +1,3 @@
|
||||
export { default as SignInMutation } from "./SignInMutation";
|
||||
export { default as SetRedirectPathMutation } from "./SetRedirectPathMutation";
|
||||
export { default as ApproveCommentMutation } from "./ApproveCommentMutation";
|
||||
export { default as RejectCommentMutation } from "./RejectCommentMutation";
|
||||
export { default as UpdateSettingsMutation } from "./UpdateSettingsMutation";
|
||||
export {
|
||||
default as RegenerateSSOKeyMutation,
|
||||
} from "./RegenerateSSOKeyMutation";
|
||||
export { default as SetAuthViewMutation } from "./SetAuthViewMutation";
|
||||
export { default as ClearAuthErrorMutation } from "./ClearAuthErrorMutation";
|
||||
export { default as CompleteAccountMutation } from "./CompleteAccountMutation";
|
||||
export { default as SetEmailMutation } from "./SetEmailMutation";
|
||||
export { default as SetUsernameMutation } from "./SetUsernameMutation";
|
||||
export { default as SetPasswordMutation } from "./SetPasswordMutation";
|
||||
export { default as UpdateUserRoleMutation } from "./UpdateUserRoleMutation";
|
||||
export { default as OpenStoryMutation } from "./OpenStoryMutation";
|
||||
export { default as CloseStoryMutation } from "./CloseStoryMutation";
|
||||
export { default as BanUserMutation } from "./BanUserMutation";
|
||||
export { default as RemoveUserBanMutation } from "./RemoveUserBanMutation";
|
||||
|
||||
@@ -2,103 +2,78 @@ import { makeRouteConfig, Redirect, Route } from "found";
|
||||
import React from "react";
|
||||
|
||||
import { GQLUSER_ROLE } from "coral-framework/schema";
|
||||
import AppContainer from "./containers/AppContainer";
|
||||
import createAuthCheckContainer from "./containers/AuthCheckContainer";
|
||||
import MainRoute from "./App/MainRoute";
|
||||
import { Ability } from "./permissions";
|
||||
import CommunityContainer from "./routes/community/containers/CommunityContainer";
|
||||
import ConfigureContainer from "./routes/configure/containers/ConfigureContainer";
|
||||
import ConfigureAdvancedRouteContainer from "./routes/configure/sections/advanced/containers/AdvancedConfigRouteContainer";
|
||||
import ConfigureAuthRouteContainer from "./routes/configure/sections/auth/containers/AuthConfigRouteContainer";
|
||||
import ConfigureGeneralRouteContainer from "./routes/configure/sections/general/containers/GeneralConfigRouteContainer";
|
||||
import ConfigureModerationRouteContainer from "./routes/configure/sections/moderation/containers/ModerationConfigRouteContainer";
|
||||
import ConfigureOrganizationRouteContainer from "./routes/configure/sections/organization/containers/OrganizationRouteContainer";
|
||||
import ConfigureWordListRouteContainer from "./routes/configure/sections/wordList/containers/WordListRouteContainer";
|
||||
import LoginContainer from "./routes/login/containers/LoginContainer";
|
||||
import ModerateContainer from "./routes/moderate/containers/ModerateContainer";
|
||||
import { createAuthCheckRoute } from "./routes/AuthCheck";
|
||||
import CommunityRoute from "./routes/Community";
|
||||
import ConfigureRoute from "./routes/Configure";
|
||||
import {
|
||||
PendingQueueContainer,
|
||||
ReportedQueueContainer,
|
||||
UnmoderatedQueueContainer,
|
||||
} from "./routes/moderate/containers/QueueContainer";
|
||||
import RejectedQueueContainer from "./routes/moderate/containers/RejectedQueueContainer";
|
||||
import SingleModerateContainer from "./routes/moderate/containers/SingleModerateContainer";
|
||||
import Stories from "./routes/stories/components/Stories";
|
||||
import StoriesContainer from "./routes/stories/containers/StoriesContainer";
|
||||
AdvancedConfigRoute,
|
||||
AuthConfigRoute,
|
||||
GeneralConfigRoute,
|
||||
ModerationConfigRoute,
|
||||
OrganizationConfigRoute,
|
||||
WordListConfigRoute,
|
||||
} from "./routes/Configure/sections";
|
||||
import LoginRoute from "./routes/Login";
|
||||
import ModerateRoute from "./routes/Moderate";
|
||||
import {
|
||||
PendingQueueRoute,
|
||||
RejectedQueueRoute,
|
||||
ReportedQueueRoute,
|
||||
UnmoderatedQueueRoute,
|
||||
} from "./routes/Moderate/Queue";
|
||||
import SingleModerateRoute from "./routes/Moderate/SingleModerate";
|
||||
import StoriesRoute from "./routes/Stories";
|
||||
|
||||
export default makeRouteConfig(
|
||||
<Route path="admin">
|
||||
<Route
|
||||
{...createAuthCheckContainer({ role: GQLUSER_ROLE.MODERATOR })
|
||||
.routeConfig}
|
||||
{...createAuthCheckRoute({ role: GQLUSER_ROLE.MODERATOR }).routeConfig}
|
||||
>
|
||||
<Route {...AppContainer.routeConfig}>
|
||||
<Route {...MainRoute.routeConfig}>
|
||||
<Redirect from="/" to="/admin/moderate" />
|
||||
<Route
|
||||
path="moderate/comment/:commentID"
|
||||
{...SingleModerateContainer.routeConfig}
|
||||
{...SingleModerateRoute.routeConfig}
|
||||
/>
|
||||
<Route path="moderate" {...ModerateContainer.routeConfig}>
|
||||
<Route path="moderate" {...ModerateRoute.routeConfig}>
|
||||
<Redirect from="/" to="/admin/moderate/reported" />
|
||||
<Route path="reported" {...ReportedQueueContainer.routeConfig} />
|
||||
<Route
|
||||
path="reported/:storyID"
|
||||
{...ReportedQueueContainer.routeConfig}
|
||||
/>
|
||||
<Route path="pending" {...PendingQueueContainer.routeConfig} />
|
||||
<Route
|
||||
path="pending/:storyID"
|
||||
{...PendingQueueContainer.routeConfig}
|
||||
/>
|
||||
<Route
|
||||
path="unmoderated"
|
||||
{...UnmoderatedQueueContainer.routeConfig}
|
||||
/>
|
||||
<Route path="reported" {...ReportedQueueRoute.routeConfig} />
|
||||
<Route path="reported/:storyID" {...ReportedQueueRoute.routeConfig} />
|
||||
<Route path="pending" {...PendingQueueRoute.routeConfig} />
|
||||
<Route path="pending/:storyID" {...PendingQueueRoute.routeConfig} />
|
||||
<Route path="unmoderated" {...UnmoderatedQueueRoute.routeConfig} />
|
||||
<Route
|
||||
path="unmoderated/:storyID"
|
||||
{...UnmoderatedQueueContainer.routeConfig}
|
||||
/>
|
||||
<Route path="rejected" {...RejectedQueueContainer.routeConfig} />
|
||||
<Route
|
||||
path="rejected/:storyID"
|
||||
{...RejectedQueueContainer.routeConfig}
|
||||
{...UnmoderatedQueueRoute.routeConfig}
|
||||
/>
|
||||
<Route path="rejected" {...RejectedQueueRoute.routeConfig} />
|
||||
<Route path="rejected/:storyID" {...RejectedQueueRoute.routeConfig} />
|
||||
<Redirect from=":storyID" to="/admin/moderate/reported/:storyID" />
|
||||
</Route>
|
||||
<Route path="stories" {...StoriesContainer.routeConfig} />
|
||||
<Route path="community" {...CommunityContainer.routeConfig} />
|
||||
<Route path="stories" Component={Stories} />
|
||||
<Route path="stories" {...StoriesRoute.routeConfig} />
|
||||
<Route path="community" {...CommunityRoute.routeConfig} />
|
||||
<Route
|
||||
{...createAuthCheckContainer({
|
||||
{...createAuthCheckRoute({
|
||||
ability: Ability.CHANGE_CONFIGURATION,
|
||||
}).routeConfig}
|
||||
>
|
||||
<Route path="configure" Component={ConfigureContainer}>
|
||||
<Route path="configure" Component={ConfigureRoute}>
|
||||
<Redirect from="/" to="/admin/configure/general" />
|
||||
<Route
|
||||
path="general"
|
||||
{...ConfigureGeneralRouteContainer.routeConfig}
|
||||
/>
|
||||
<Route path="general" {...GeneralConfigRoute.routeConfig} />
|
||||
<Route
|
||||
path="organization"
|
||||
{...ConfigureOrganizationRouteContainer.routeConfig}
|
||||
/>
|
||||
<Route
|
||||
path="moderation"
|
||||
{...ConfigureModerationRouteContainer.routeConfig}
|
||||
/>
|
||||
<Route
|
||||
path="wordList"
|
||||
{...ConfigureWordListRouteContainer.routeConfig}
|
||||
/>
|
||||
<Route path="auth" {...ConfigureAuthRouteContainer.routeConfig} />
|
||||
<Route
|
||||
path="advanced"
|
||||
{...ConfigureAdvancedRouteContainer.routeConfig}
|
||||
{...OrganizationConfigRoute.routeConfig}
|
||||
/>
|
||||
<Route path="moderation" {...ModerationConfigRoute.routeConfig} />
|
||||
<Route path="wordList" {...WordListConfigRoute.routeConfig} />
|
||||
<Route path="auth" {...AuthConfigRoute.routeConfig} />
|
||||
<Route path="advanced" {...AdvancedConfigRoute.routeConfig} />
|
||||
</Route>
|
||||
</Route>
|
||||
</Route>
|
||||
</Route>
|
||||
<Route path="login" {...LoginContainer.routeConfig} />
|
||||
<Route path="login" {...LoginRoute.routeConfig} />
|
||||
</Route>
|
||||
);
|
||||
|
||||
+9
-8
@@ -1,20 +1,21 @@
|
||||
import { Match, Router, withRouter } from "found";
|
||||
import React from "react";
|
||||
|
||||
import { AuthCheckContainerQueryResponse } from "coral-admin/__generated__/AuthCheckContainerQuery.graphql";
|
||||
import { AuthCheckRouteQueryResponse } from "coral-admin/__generated__/AuthCheckRouteQuery.graphql";
|
||||
import { SetRedirectPathMutation } from "coral-admin/mutations";
|
||||
import { AbilityType, can } from "coral-admin/permissions";
|
||||
import RestrictedContainer from "coral-admin/views/restricted/containers/RestrictedContainer";
|
||||
import { roleIsAtLeast } from "coral-framework/helpers";
|
||||
import { graphql, MutationProp, withMutation } from "coral-framework/lib/relay";
|
||||
import { withRouteConfig } from "coral-framework/lib/router";
|
||||
import { GQLUSER_ROLE } from "coral-framework/schema";
|
||||
|
||||
import RestrictedContainer from "./RestrictedContainer";
|
||||
|
||||
interface Props {
|
||||
match: Match;
|
||||
router: Router;
|
||||
setRedirectPath: MutationProp<typeof SetRedirectPathMutation>;
|
||||
data: AuthCheckContainerQueryResponse;
|
||||
data: AuthCheckRouteQueryResponse;
|
||||
}
|
||||
|
||||
type CheckParams =
|
||||
@@ -27,8 +28,8 @@ type CheckParams =
|
||||
ability: AbilityType;
|
||||
};
|
||||
|
||||
function createAuthCheckContainer(check: CheckParams) {
|
||||
class AuthCheckContainer extends React.Component<Props> {
|
||||
function createAuthCheckRoute(check: CheckParams) {
|
||||
class AuthCheckRoute extends React.Component<Props> {
|
||||
private wasLoggedIn = false;
|
||||
constructor(props: Props) {
|
||||
super(props);
|
||||
@@ -96,7 +97,7 @@ function createAuthCheckContainer(check: CheckParams) {
|
||||
|
||||
const enhanced = withRouteConfig<Props>({
|
||||
query: graphql`
|
||||
query AuthCheckContainerQuery {
|
||||
query AuthCheckRouteQuery {
|
||||
viewer {
|
||||
...RestrictedContainer_viewer
|
||||
username
|
||||
@@ -121,8 +122,8 @@ function createAuthCheckContainer(check: CheckParams) {
|
||||
}
|
||||
}
|
||||
`,
|
||||
})(withRouter(withMutation(SetRedirectPathMutation)(AuthCheckContainer)));
|
||||
})(withRouter(withMutation(SetRedirectPathMutation)(AuthCheckRoute)));
|
||||
return enhanced;
|
||||
}
|
||||
|
||||
export default createAuthCheckContainer;
|
||||
export default createAuthCheckRoute;
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user