summaryrefslogtreecommitdiffstats
path: root/ui/src
diff options
context:
space:
mode:
authorFilip785 <fdjuricic98@gmail.com>2020-07-08 17:21:44 +0200
committerFilip785 <fdjuricic98@gmail.com>2020-07-08 17:21:44 +0200
commite7b7b0dee30356ef6912168949112896fe4dd65c (patch)
tree3ab0abc410a4da218c08b45349824585afa8cb6c /ui/src
parent68e9755e593bbd8230eab2a123e822022721f071 (diff)
parentcd5f500d11d131213ccb89d3a8c9f5e31b3c758b (diff)
Merge remote-tracking branch 'upstream/master' into cake-day
Diffstat (limited to 'ui/src')
-rw-r--r--ui/src/components/comment-node.tsx4
-rw-r--r--ui/src/components/comment-nodes.tsx2
-rw-r--r--ui/src/components/communities.tsx12
-rw-r--r--ui/src/components/community-form.tsx11
-rw-r--r--ui/src/components/community.tsx28
-rw-r--r--ui/src/components/create-community.tsx56
-rw-r--r--ui/src/components/create-post.tsx73
-rw-r--r--ui/src/components/create-private-message.tsx42
-rw-r--r--ui/src/components/inbox.tsx20
-rw-r--r--ui/src/components/login.tsx4
-rw-r--r--ui/src/components/main.tsx5
-rw-r--r--ui/src/components/modlog.tsx9
-rw-r--r--ui/src/components/navbar.tsx3
-rw-r--r--ui/src/components/password_change.tsx25
-rw-r--r--ui/src/components/post-form.tsx25
-rw-r--r--ui/src/components/post-listing.tsx6
-rw-r--r--ui/src/components/post-listings.tsx4
-rw-r--r--ui/src/components/post.tsx52
-rw-r--r--ui/src/components/private-message-form.tsx1
-rw-r--r--ui/src/components/search.tsx48
-rw-r--r--ui/src/components/sidebar.tsx2
-rw-r--r--ui/src/components/sponsors.tsx38
-rw-r--r--ui/src/components/user.tsx38
-rw-r--r--ui/src/services/WebSocketService.ts2
-rw-r--r--ui/src/version.ts2
25 files changed, 398 insertions, 114 deletions
diff --git a/ui/src/components/comment-node.tsx b/ui/src/components/comment-node.tsx
index 762344aa..ab9321bd 100644
--- a/ui/src/components/comment-node.tsx
+++ b/ui/src/components/comment-node.tsx
@@ -74,6 +74,7 @@ interface CommentNodeProps {
showCommunity?: boolean;
sort?: CommentSortType;
sortType?: SortType;
+ enableDownvotes: boolean;
}
export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
@@ -287,7 +288,7 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
<span class="ml-1">{this.state.upvotes}</span>
)}
</button>
- {WebSocketService.Instance.site.enable_downvotes && (
+ {this.props.enableDownvotes && (
<button
className={`btn btn-link btn-animate ${
this.state.my_vote == -1
@@ -711,6 +712,7 @@ export class CommentNode extends Component<CommentNodeProps, CommentNodeState> {
postCreatorId={this.props.postCreatorId}
sort={this.props.sort}
sortType={this.props.sortType}
+ enableDownvotes={this.props.enableDownvotes}
/>
)}
{/* A collapsed clearfix */}
diff --git a/ui/src/components/comment-nodes.tsx b/ui/src/components/comment-nodes.tsx
index 875db1f2..bd5ec20b 100644
--- a/ui/src/components/comment-nodes.tsx
+++ b/ui/src/components/comment-nodes.tsx
@@ -24,6 +24,7 @@ interface CommentNodesProps {
showCommunity?: boolean;
sort?: CommentSortType;
sortType?: SortType;
+ enableDownvotes: boolean;
}
export class CommentNodes extends Component<
@@ -52,6 +53,7 @@ export class CommentNodes extends Component<
showCommunity={this.props.showCommunity}
sort={this.props.sort}
sortType={this.props.sortType}
+ enableDownvotes={this.props.enableDownvotes}
/>
))}
</div>
diff --git a/ui/src/components/communities.tsx b/ui/src/components/communities.tsx
index a3e340ff..441f7bb1 100644
--- a/ui/src/components/communities.tsx
+++ b/ui/src/components/communities.tsx
@@ -1,5 +1,4 @@
import { Component, linkEvent } from 'inferno';
-import { Link } from 'inferno-router';
import { Subscription } from 'rxjs';
import { retryWhen, delay, take } from 'rxjs/operators';
import {
@@ -11,6 +10,7 @@ import {
ListCommunitiesForm,
SortType,
WebSocketJsonResponse,
+ GetSiteResponse,
} from '../interfaces';
import { WebSocketService } from '../services';
import { wsJsonToRes, toast } from '../utils';
@@ -47,6 +47,7 @@ export class Communities extends Component<any, CommunitiesState> {
);
this.refetch();
+ WebSocketService.Instance.getSite();
}
getPageFromProps(props: any): number {
@@ -57,12 +58,6 @@ export class Communities extends Component<any, CommunitiesState> {
this.subscription.unsubscribe();
}
- componentDidMount() {
- document.title = `${i18n.t('communities')} - ${
- WebSocketService.Instance.site.name
- }`;
- }
-
// Necessary for back button for some reason
componentWillReceiveProps(nextProps: any) {
if (nextProps.history.action == 'POP') {
@@ -244,6 +239,9 @@ export class Communities extends Component<any, CommunitiesState> {
found.subscribed = data.community.subscribed;
found.number_of_subscribers = data.community.number_of_subscribers;
this.setState(this.state);
+ } else if (res.op == UserOperation.GetSite) {
+ let data = res.data as GetSiteResponse;
+ document.title = `${i18n.t('communities')} - ${data.site.name}`;
}
}
}
diff --git a/ui/src/components/community-form.tsx b/ui/src/components/community-form.tsx
index 90e12738..46d62ef5 100644
--- a/ui/src/components/community-form.tsx
+++ b/ui/src/components/community-form.tsx
@@ -8,7 +8,6 @@ import {
Category,
ListCategoriesResponse,
CommunityResponse,
- GetSiteResponse,
WebSocketJsonResponse,
} from '../interfaces';
import { WebSocketService } from '../services';
@@ -30,13 +29,13 @@ interface CommunityFormProps {
onCancel?(): any;
onCreate?(community: Community): any;
onEdit?(community: Community): any;
+ enableNsfw: boolean;
}
interface CommunityFormState {
communityForm: CommunityFormI;
categories: Array<Category>;
loading: boolean;
- enable_nsfw: boolean;
}
export class CommunityForm extends Component<
@@ -56,7 +55,6 @@ export class CommunityForm extends Component<
},
categories: [],
loading: false,
- enable_nsfw: null,
};
constructor(props: any, context: any) {
@@ -86,7 +84,6 @@ export class CommunityForm extends Component<
);
WebSocketService.Instance.listCategories();
- WebSocketService.Instance.getSite();
}
componentDidMount() {
@@ -187,7 +184,7 @@ export class CommunityForm extends Component<
</div>
</div>
- {this.state.enable_nsfw && (
+ {this.props.enableNsfw && (
<div class="form-group row">
<div class="col-12">
<div class="form-check">
@@ -303,10 +300,6 @@ export class CommunityForm extends Component<
let data = res.data as CommunityResponse;
this.state.loading = false;
this.props.onEdit(data.community);
- } else if (res.op == UserOperation.GetSite) {
- let data = res.data as GetSiteResponse;
- this.state.enable_nsfw = data.site.enable_nsfw;
- this.setState(this.state);
}
}
}
diff --git a/ui/src/components/community.tsx b/ui/src/components/community.tsx
index c193532b..ff50c3dc 100644
--- a/ui/src/components/community.tsx
+++ b/ui/src/components/community.tsx
@@ -23,6 +23,8 @@ import {
GetCommentsResponse,
CommentResponse,
WebSocketJsonResponse,
+ GetSiteResponse,
+ Site,
} from '../interfaces';
import { WebSocketService } from '../services';
import { PostListings } from './post-listings';
@@ -60,6 +62,7 @@ interface State {
dataType: DataType;
sort: SortType;
page: number;
+ site: Site;
}
export class Community extends Component<any, State> {
@@ -97,6 +100,20 @@ export class Community extends Component<any, State> {
dataType: getDataTypeFromProps(this.props),
sort: getSortTypeFromProps(this.props),
page: getPageFromProps(this.props),
+ site: {
+ id: undefined,
+ name: undefined,
+ creator_id: undefined,
+ published: undefined,
+ creator_name: undefined,
+ number_of_users: undefined,
+ number_of_posts: undefined,
+ number_of_comments: undefined,
+ number_of_communities: undefined,
+ enable_downvotes: undefined,
+ open_registration: undefined,
+ enable_nsfw: undefined,
+ },
};
constructor(props: any, context: any) {
@@ -119,6 +136,7 @@ export class Community extends Component<any, State> {
name: this.state.communityName ? this.state.communityName : null,
};
WebSocketService.Instance.getCommunity(form);
+ WebSocketService.Instance.getSite();
}
componentWillUnmount() {
@@ -174,6 +192,7 @@ export class Community extends Component<any, State> {
moderators={this.state.moderators}
admins={this.state.admins}
online={this.state.online}
+ enableNsfw={this.state.site.enable_nsfw}
/>
</div>
</div>
@@ -188,6 +207,8 @@ export class Community extends Component<any, State> {
posts={this.state.posts}
removeDuplicates
sort={this.state.sort}
+ enableDownvotes={this.state.site.enable_downvotes}
+ enableNsfw={this.state.site.enable_nsfw}
/>
) : (
<CommentNodes
@@ -195,6 +216,7 @@ export class Community extends Component<any, State> {
noIndent
sortType={this.state.sort}
showContext
+ enableDownvotes={this.state.site.enable_downvotes}
/>
);
}
@@ -331,7 +353,7 @@ export class Community extends Component<any, State> {
this.state.moderators = data.moderators;
this.state.admins = data.admins;
this.state.online = data.online;
- document.title = `/c/${this.state.community.name} - ${WebSocketService.Instance.site.name}`;
+ document.title = `/c/${this.state.community.name} - ${this.state.site.name}`;
this.setState(this.state);
this.fetchData();
} else if (res.op == UserOperation.EditCommunity) {
@@ -399,6 +421,10 @@ export class Community extends Component<any, State> {
let data = res.data as CommentResponse;
createCommentLikeRes(data, this.state.comments);
this.setState(this.state);
+ } else if (res.op == UserOperation.GetSite) {
+ let data = res.data as GetSiteResponse;
+ this.state.site = data.site;
+ this.setState(this.state);
}
}
}
diff --git a/ui/src/components/create-community.tsx b/ui/src/components/create-community.tsx
index 5c7a0a9b..86929894 100644
--- a/ui/src/components/create-community.tsx
+++ b/ui/src/components/create-community.tsx
@@ -1,19 +1,44 @@
import { Component } from 'inferno';
+import { Subscription } from 'rxjs';
+import { retryWhen, delay, take } from 'rxjs/operators';
import { CommunityForm } from './community-form';
-import { Community } from '../interfaces';
+import {
+ Community,
+ UserOperation,
+ WebSocketJsonResponse,
+ GetSiteResponse,
+} from '../interfaces';
+import { toast, wsJsonToRes } from '../utils';
import { WebSocketService } from '../services';
import { i18n } from '../i18next';
-export class CreateCommunity extends Component<any, any> {
+interface CreateCommunityState {
+ enableNsfw: boolean;
+}
+
+export class CreateCommunity extends Component<any, CreateCommunityState> {
+ private subscription: Subscription;
+ private emptyState: CreateCommunityState = {
+ enableNsfw: null,
+ };
constructor(props: any, context: any) {
super(props, context);
this.handleCommunityCreate = this.handleCommunityCreate.bind(this);
+ this.state = this.emptyState;
+
+ this.subscription = WebSocketService.Instance.subject
+ .pipe(retryWhen(errors => errors.pipe(delay(3000), take(10))))
+ .subscribe(
+ msg => this.parseMessage(msg),
+ err => console.error(err),
+ () => console.log('complete')
+ );
+
+ WebSocketService.Instance.getSite();
}
- componentDidMount() {
- document.title = `${i18n.t('create_community')} - ${
- WebSocketService.Instance.site.name
- }`;
+ componentWillUnmount() {
+ this.subscription.unsubscribe();
}
render() {
@@ -22,7 +47,10 @@ export class CreateCommunity extends Component<any, any> {
<div class="row">
<div class="col-12 col-lg-6 offset-lg-3 mb-4">
<h5>{i18n.t('create_community')}</h5>
- <CommunityForm onCreate={this.handleCommunityCreate} />
+ <CommunityForm
+ onCreate={this.handleCommunityCreate}
+ enableNsfw={this.state.enableNsfw}
+ />
</div>
</div>
</div>
@@ -32,4 +60,18 @@ export class CreateCommunity extends Component<any, any> {
handleCommunityCreate(community: Community) {
this.props.history.push(`/c/${community.name}`);
}
+
+ parseMessage(msg: WebSocketJsonResponse) {
+ console.log(msg);
+ let res = wsJsonToRes(msg);
+ if (msg.error) {
+ toast(i18n.t(msg.error), 'danger');
+ return;
+ } else if (res.op == UserOperation.GetSite) {
+ let data = res.data as GetSiteResponse;
+ this.state.enableNsfw = data.site.enable_nsfw;
+ this.setState(this.state);
+ document.title = `${i18n.t('create_community')} - ${data.site.name}`;
+ }
+ }
}
diff --git a/ui/src/components/create-post.tsx b/ui/src/components/create-post.tsx
index adbdfb58..348ba0cb 100644
--- a/ui/src/components/create-post.tsx
+++ b/ui/src/components/create-post.tsx
@@ -1,19 +1,59 @@
import { Component } from 'inferno';
+import { Subscription } from 'rxjs';
+import { retryWhen, delay, take } from 'rxjs/operators';
import { PostForm } from './post-form';
+import { toast, wsJsonToRes } from '../utils';
import { WebSocketService } from '../services';
-import { PostFormParams } from '../interfaces';
+import {
+ UserOperation,
+ PostFormParams,
+ WebSocketJsonResponse,
+ GetSiteResponse,
+ Site,
+} from '../interfaces';
import { i18n } from '../i18next';
-export class CreatePost extends Component<any, any> {
+interface CreatePostState {
+ site: Site;
+}
+
+export class CreatePost extends Component<any, CreatePostState> {
+ private subscription: Subscription;
+ private emptyState: CreatePostState = {
+ site: {
+ id: undefined,
+ name: undefined,
+ creator_id: undefined,
+ published: undefined,
+ creator_name: undefined,
+ number_of_users: undefined,
+ number_of_posts: undefined,
+ number_of_comments: undefined,
+ number_of_communities: undefined,
+ enable_downvotes: undefined,
+ open_registration: undefined,
+ enable_nsfw: undefined,
+ },
+ };
+
constructor(props: any, context: any) {
super(props, context);
this.handlePostCreate = this.handlePostCreate.bind(this);
+ this.state = this.emptyState;
+
+ this.subscription = WebSocketService.Instance.subject
+ .pipe(retryWhen(errors => errors.pipe(delay(3000), take(10))))
+ .subscribe(
+ msg => this.parseMessage(msg),
+ err => console.error(err),
+ () => console.log('complete')
+ );
+
+ WebSocketService.Instance.getSite();
}
- componentDidMount() {
- document.title = `${i18n.t('create_post')} - ${
- WebSocketService.Instance.site.name
- }`;
+ componentWillUnmount() {
+ this.subscription.unsubscribe();
}
render() {
@@ -22,7 +62,12 @@ export class CreatePost extends Component<any, any> {
<div class="row">
<div class="col-12 col-lg-6 offset-lg-3 mb-4">
<h5>{i18n.t('create_post')}</h5>
- <PostForm onCreate={this.handlePostCreate} params={this.params} />
+ <PostForm
+ onCreate={this.handlePostCreate}
+ params={this.params}
+ enableDownvotes={this.state.site.enable_downvotes}
+ enableNsfw={this.state.site.enable_nsfw}
+ />
</div>
</div>
</div>
@@ -56,4 +101,18 @@ export class CreatePost extends Component<any, any> {
handlePostCreate(id: number) {
this.props.history.push(`/post/${id}`);
}
+
+ parseMessage(msg: WebSocketJsonResponse) {
+ console.log(msg);
+ let res = wsJsonToRes(msg);
+ if (msg.error) {
+ toast(i18n.t(msg.error), 'danger');
+ return;
+ } else if (res.op == UserOperation.GetSite) {
+ let data = res.data as GetSiteResponse;
+ this.state.site = data.site;
+ this.setState(this.state);
+ document.title = `${i18n.t('create_post')} - ${data.site.name}`;
+ }
+ }
}
diff --git a/ui/src/components/create-private-message.tsx b/ui/src/components/create-private-message.tsx
index 7160bc52..21ed04c7 100644
--- a/ui/src/components/create-private-message.tsx
+++ b/ui/src/components/create-private-message.tsx
@@ -1,22 +1,38 @@
import { Component } from 'inferno';
+import { Subscription } from 'rxjs';
+import { retryWhen, delay, take } from 'rxjs/operators';
import { PrivateMessageForm } from './private-message-form';
import { WebSocketService } from '../services';
-import { PrivateMessageFormParams } from '../interfaces';
-import { toast } from '../utils';
+import {
+ UserOperation,
+ WebSocketJsonResponse,
+ GetSiteResponse,
+ PrivateMessageFormParams,
+} from '../interfaces';
+import { toast, wsJsonToRes } from '../utils';
import { i18n } from '../i18next';
export class CreatePrivateMessage extends Component<any, any> {
+ private subscription: Subscription;
constructor(props: any, context: any) {
super(props, context);
this.handlePrivateMessageCreate = this.handlePrivateMessageCreate.bind(
this
);
+
+ this.subscription = WebSocketService.Instance.subject
+ .pipe(retryWhen(errors => errors.pipe(delay(3000), take(10))))
+ .subscribe(
+ msg => this.parseMessage(msg),
+ err => console.error(err),
+ () => console.log('complete')
+ );
+
+ WebSocketService.Instance.getSite();
}
- componentDidMount() {
- document.title = `${i18n.t('create_private_message')} - ${
- WebSocketService.Instance.site.name
- }`;
+ componentWillUnmount() {
+ this.subscription.unsubscribe();
}
render() {
@@ -50,4 +66,18 @@ export class CreatePrivateMessage extends Component<any, any> {
// Navigate to the front
this.props.history.push(`/`);
}
+
+ parseMessage(msg: WebSocketJsonResponse) {
+ console.log(msg);
+ let res = wsJsonToRes(msg);
+ if (msg.error) {
+ toast(i18n.t(msg.error), 'danger');
+ return;
+ } else if (res.op == UserOperation.GetSite) {
+ let data = res.data as GetSiteResponse;
+ document.title = `${i18n.t('create_private_message')} - ${
+ data.site.name
+ }`;
+ }
+ }
}
diff --git a/ui/src/components/inbox.tsx b/ui/src/components/inbox.tsx
index 3b963a79..a88d45c5 100644
--- a/ui/src/components/inbox.tsx
+++ b/ui/src/components/inbox.tsx
@@ -16,6 +16,7 @@ import {
GetPrivateMessagesForm,
PrivateMessagesResponse,
PrivateMessageResponse,
+ GetSiteResponse,
} from '../interfaces';
import { WebSocketService, UserService } from '../services';
import {
@@ -56,6 +57,7 @@ interface InboxState {
messages: Array<PrivateMessageI>;
sort: SortType;
page: number;
+ enableDownvotes: boolean;
}
export class Inbox extends Component<any, InboxState> {
@@ -68,6 +70,7 @@ export class Inbox extends Component<any, InboxState> {
messages: [],
sort: SortType.New,
page: 1,
+ enableDownvotes: undefined,
};
constructor(props: any, context: any) {
@@ -85,18 +88,13 @@ export class Inbox extends Component<any, InboxState> {
);
this.refetch();
+ WebSocketService.Instance.getSite();
}
componentWillUnmount() {
this.subscription.unsubscribe();
}
- componentDidMount() {
- document.title = `/u/${UserService.Instance.user.username} ${i18n.t(
- 'inbox'
- )} - ${WebSocketService.Instance.site.name}`;
- }
-
render() {
return (
<div class="container">
@@ -270,6 +268,7 @@ export class Inbox extends Component<any, InboxState> {
noIndent
markable
showContext
+ enableDownvotes={this.state.enableDownvotes}
/>
) : (
<PrivateMessage privateMessage={i} />
@@ -287,6 +286,7 @@ export class Inbox extends Component<any, InboxState> {
noIndent
markable
showContext
+ enableDownvotes={this.state.enableDownvotes}
/>
</div>
);
@@ -301,6 +301,7 @@ export class Inbox extends Component<any, InboxState> {
noIndent
markable
showContext
+ enableDownvotes={this.state.enableDownvotes}
/>
))}
</div>
@@ -522,6 +523,13 @@ export class Inbox extends Component<any, InboxState> {
let data = res.data as CommentResponse;
createCommentLikeRes(data, this.state.replies);
this.setState(this.state);
+ } else if (res.op == UserOperation.GetSite) {
+ let data = res.data as GetSiteResponse;
+ this.state.enableDownvotes = data.site.enable_downvotes;
+ this.setState(this.state);
+ document.title = `/u/${UserService.Instance.user.username} ${i18n.t(
+ 'inbox'
+ )} - ${data.site.name}`;
}
}
diff --git a/ui/src/components/login.tsx b/ui/src/components/login.tsx
index 97899345..eb1d0baf 100644
--- a/ui/src/components/login.tsx
+++ b/ui/src/components/login.tsx
@@ -385,9 +385,7 @@ export class Login extends Component<any, State> {
let data = res.data as GetSiteResponse;
this.state.enable_nsfw = data.site.enable_nsfw;
this.setState(this.state);
- document.title = `${i18n.t('login')} - ${
- WebSocketService.Instance.site.name
- }`;
+ document.title = `${i18n.t('login')} - ${data.site.name}`;
}
}
}
diff --git a/ui/src/components/main.tsx b/ui/src/components/main.tsx
index 4e04fe48..20735049 100644
--- a/ui/src/components/main.tsx
+++ b/ui/src/components/main.tsx
@@ -418,6 +418,8 @@ export class Main extends Component<any, MainState> {
showCommunity
removeDuplicates
sort={this.state.sort}
+ enableDownvotes={this.state.siteRes.site.enable_downvotes}
+ enableNsfw={this.state.siteRes.site.enable_nsfw}
/>
) : (
<CommentNodes
@@ -426,6 +428,7 @@ export class Main extends Component<any, MainState> {
showCommunity
sortType={this.state.sort}
showContext
+ enableDownvotes={this.state.siteRes.site.enable_downvotes}
/>
);
}
@@ -617,7 +620,7 @@ export class Main extends Component<any, MainState> {
this.state.siteRes.banned = data.banned;
this.state.siteRes.online = data.online;
this.setState(this.state);
- document.title = `${WebSocketService.Instance.site.name}`;
+ document.title = `${this.state.siteRes.site.name}`;
} else if (res.op == UserOperation.EditSite) {
let data = res.data as SiteResponse;
this.state.siteRes.site = data.site;
diff --git a/ui/src/components/modlog.tsx b/ui/src/components/modlog.tsx
index 04628ebd..9a5131c9 100644
--- a/ui/src/components/modlog.tsx
+++ b/ui/src/components/modlog.tsx
@@ -16,6 +16,7 @@ import {
ModAddCommunity,
ModAdd,
WebSocketJsonResponse,
+ GetSiteResponse,
} from '../interfaces';
import { WebSocketService } from '../services';
import { wsJsonToRes, addTypeInfo, fetchLimit, toast } from '../utils';
@@ -64,16 +65,13 @@ export class Modlog extends Component<any, ModlogState> {
);
this.refetch();
+ WebSocketService.Instance.getSite();
}
componentWillUnmount() {
this.subscription.unsubscribe();
}
- componentDidMount() {
- document.title = `Modlog - ${WebSocketService.Instance.site.name}`;
- }
-
setCombined(res: GetModlogResponse) {
let removed_posts = addTypeInfo(res.removed_posts, 'removed_posts');
let locked_posts = addTypeInfo(res.locked_posts, 'locked_posts');
@@ -434,6 +432,9 @@ export class Modlog extends Component<any, ModlogState> {
this.state.loading = false;
window.scrollTo(0, 0);
this.setCombined(data);
+ } else if (res.op == UserOperation.GetSite) {
+ let data = res.data as GetSiteResponse;
+ document.title = `Modlog - ${data.site.name}`;
}
}
}
diff --git a/ui/src/components/navbar.tsx b/ui/src/components/navbar.tsx
index 489f1b93..a332f0e5 100644
--- a/ui/src/components/navbar.tsx
+++ b/ui/src/components/navbar.tsx
@@ -396,9 +396,6 @@ export class Navbar extends Component<any, NavbarState> {
if (data.site && !this.state.siteName) {
this.state.siteName = data.site.name;
this.state.admins = data.admins;
- WebSocketService.Instance.site = data.site;
- WebSocketService.Instance.admins = data.admins;
-
this.setState(this.state);
}
}
diff --git a/ui/src/components/password_change.tsx b/ui/src/components/password_change.tsx
index 9445e8ed..f33e9af2 100644
--- a/ui/src/components/password_change.tsx
+++ b/ui/src/components/password_change.tsx
@@ -6,6 +6,7 @@ import {
LoginResponse,
PasswordChangeForm,
WebSocketJsonResponse,
+ GetSiteResponse,
} from '../interfaces';
import { WebSocketService, UserService } from '../services';
import { wsJsonToRes, capitalizeFirstLetter, toast } from '../utils';
@@ -40,18 +41,13 @@ export class PasswordChange extends Component<any, State> {
err => console.error(err),
() => console.log('complete')
);
+ WebSocketService.Instance.getSite();
}
componentWillUnmount() {
this.subscription.unsubscribe();
}
- componentDidMount() {
- document.title = `${i18n.t('password_change')} - ${
- WebSocketService.Instance.site.name
- }`;
- }
-
render() {
return (
<div class="container">
@@ -138,14 +134,15 @@ export class PasswordChange extends Component<any, State> {
this.state.loading = false;
this.setState(this.state);
return;
- } else {
- if (res.op == UserOperation.PasswordChange) {
- let data = res.data as LoginResponse;
- this.state = this.emptyState;
- this.setState(this.state);
- UserService.Instance.login(data);
- this.props.history.push('/');
- }
+ } else if (res.op == UserOperation.PasswordChange) {
+ let data = res.data as LoginResponse;
+ this.state = this.emptyState;
+ this.setState(this.state);
+ UserService.Instance.login(data);
+ this.props.history.push('/');
+ } else if (res.op == UserOperation.GetSite) {
+ let data = res.data as GetSiteResponse;
+ document.title = `${i18n.t('password_change')} - ${data.site.name}`;
}
}
}
diff --git a/ui/src/components/post-form.tsx b/ui/src/components/post-form.tsx
index fdf6ebe4..8c693ac0 100644
--- a/ui/src/components/post-form.tsx
+++ b/ui/src/components/post-form.tsx
@@ -16,7 +16,6 @@ import {
SearchForm,
SearchType,
SearchResponse,
- GetSiteResponse,
WebSocketJsonResponse,
} from '../interfaces';
import { WebSocketService, UserService } from '../services';
@@ -52,6 +51,8 @@ interface PostFormProps {
onCancel?(): any;
onCreate?(id: number): any;
onEdit?(post: Post): any;
+ enableNsfw: boolean;
+ enableDownvotes: boolean;
}
interface PostFormState {
@@ -63,7 +64,6 @@ interface PostFormState {
suggestedTitle: string;
suggestedPosts: Array<Post>;
crossPosts: Array<Post>;
- enable_nsfw: boolean;
}
export class PostForm extends Component<PostFormProps, PostFormState> {
@@ -87,7 +87,6 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
suggestedTitle: undefined,
suggestedPosts: [],
crossPosts: [],
- enable_nsfw: undefined,
};
constructor(props: any, context: any) {
@@ -138,7 +137,6 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
};
WebSocketService.Instance.listCommunities(listCommunitiesForm);
- WebSocketService.Instance.getSite();
}
componentDidMount() {
@@ -240,7 +238,12 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
<div class="my-1 text-muted small font-weight-bold">
{i18n.t('cross_posts')}
</div>
- <PostListings showCommunity posts={this.state.crossPosts} />
+ <PostListings
+ showCommunity
+ posts={this.state.crossPosts}
+ enableDownvotes={this.props.enableDownvotes}
+ enableNsfw={this.props.enableNsfw}
+ />
</>
)}
</div>
@@ -265,7 +268,11 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
<div class="my-1 text-muted small font-weight-bold">
{i18n.t('related_posts')}
</div>
- <PostListings posts={this.state.suggestedPosts} />
+ <PostListings
+ posts={this.state.suggestedPosts}
+ enableDownvotes={this.p