From d7ab85ab70478f1ec440c920d726d08b145cef5e Mon Sep 17 00:00:00 2001 From: Dessalines Date: Tue, 13 Aug 2019 19:52:43 -0700 Subject: Squashed commit of the following: commit ecd6c5a2f47cbbb2fc4bf482fadd78380303a904 Author: Dessalines Date: Tue Aug 13 19:49:38 2019 -0700 Adding some docs commit 3babd09affb1920da3d0a0ceb7e24c8aeeb9cf1a Author: Dessalines Date: Tue Aug 13 19:28:46 2019 -0700 Adding save user settings commit 6e8da9cc9e522d0da668bfa31944c3348cc79620 Merge: 3246d5d c148eef Author: Dessalines Date: Tue Aug 13 17:26:25 2019 -0700 Merge branch 'dev' into nsfw commit b3d4a5c4ce441bcc664704aba44cedb51d887599 Author: Dessalines Date: Sun Aug 11 20:55:09 2019 -0700 nsfw mostly done, except for settings page. --- ui/package.json | 2 +- ui/src/components/community-form.tsx | 17 +++++++++- ui/src/components/community.tsx | 4 +++ ui/src/components/login.tsx | 15 +++++++- ui/src/components/post-form.tsx | 15 ++++++++ ui/src/components/post-listing.tsx | 6 ++++ ui/src/components/setup.tsx | 1 + ui/src/components/user.tsx | 66 ++++++++++++++++++++++++++++++++++-- ui/src/interfaces.ts | 15 ++++++-- ui/src/services/WebSocketService.ts | 7 +++- ui/src/translations/en.ts | 3 ++ ui/tslint.json | 2 +- ui/yarn.lock | 2 +- 13 files changed, 144 insertions(+), 11 deletions(-) (limited to 'ui') diff --git a/ui/package.json b/ui/package.json index d86725f2..523700a2 100644 --- a/ui/package.json +++ b/ui/package.json @@ -41,6 +41,6 @@ "fuse-box": "^3.1.3", "ts-transform-classcat": "^0.0.2", "ts-transform-inferno": "^4.0.2", - "typescript": "^3.3.3333" + "typescript": "^3.5.3" } } diff --git a/ui/src/components/community-form.tsx b/ui/src/components/community-form.tsx index b039fb4d..833d8a3f 100644 --- a/ui/src/components/community-form.tsx +++ b/ui/src/components/community-form.tsx @@ -30,7 +30,8 @@ export class CommunityForm extends Component +
+
+
+ + +
+
+
+
+
+
+ + +
+
+
-
@@ -181,6 +189,11 @@ export class Login extends Component { i.setState(i.state); } + handleRegisterShowNsfwChange(i: Login, event: any) { + i.state.registerForm.show_nsfw = event.target.checked; + i.setState(i.state); + } + parseMessage(msg: any) { let op: UserOperation = msgOp(msg); if (msg.error) { diff --git a/ui/src/components/post-form.tsx b/ui/src/components/post-form.tsx index 79d37b42..704b1cdd 100644 --- a/ui/src/components/post-form.tsx +++ b/ui/src/components/post-form.tsx @@ -31,6 +31,7 @@ export class PostForm extends Component { private emptyState: PostFormState = { postForm: { name: null, + nsfw: false, auth: null, community_id: null, creator_id: (UserService.Instance.user) ? UserService.Instance.user.id : null, @@ -54,6 +55,7 @@ export class PostForm extends Component { edit_id: this.props.post.id, creator_id: this.props.post.creator_id, url: this.props.post.url, + nsfw: this.props.post.nsfw, auth: null } } @@ -126,6 +128,14 @@ export class PostForm extends Component { } +
+
+
+ + +
+
+
{this.userInfo()} + {this.isCurrentUser && + this.userSettings() + } {this.moderates()} {this.follows()}
@@ -219,7 +233,7 @@ export class User extends Component { return (
{user.name}
-
{i18n.t('joined')}
+
{i18n.t('joined')}
@@ -235,6 +249,30 @@ export class User extends Component { ) } + userSettings() { + return ( +
+
#
+
+
+
+
+ + +
+
+
+
+
+ +
+
+ +
+ ) + } + moderates() { return (
@@ -329,6 +367,19 @@ export class User extends Component { i.refetch(); } + handleUserSettingsShowNsfwChange(i: User, event: any) { + i.state.userSettingsForm.show_nsfw = event.target.checked; + i.setState(i.state); + } + + handleUserSettingsSubmit(i: User, event: any) { + event.preventDefault(); + i.state.userSettingsLoading = true; + i.setState(i.state); + + WebSocketService.Instance.saveUserSettings(i.state.userSettingsForm); + } + parseMessage(msg: any) { console.log(msg); let op: UserOperation = msgOp(msg); @@ -343,6 +394,9 @@ export class User extends Component { this.state.moderates = res.moderates; this.state.posts = res.posts; this.state.loading = false; + if (this.isCurrentUser) { + this.state.userSettingsForm.show_nsfw = UserService.Instance.user.show_nsfw; + } document.title = `/u/${this.state.user.name} - ${WebSocketService.Instance.site.name}`; window.scrollTo(0,0); this.setState(this.state); @@ -378,6 +432,12 @@ export class User extends Component { if (res.comment.my_vote !== null) found.my_vote = res.comment.my_vote; this.setState(this.state); + } else if (op == UserOperation.SaveUserSettings) { + this.state = this.emptyState; + this.state.userSettingsLoading = false; + this.setState(this.state); + let res: LoginResponse = msg; + UserService.Instance.login(res); } } } diff --git a/ui/src/interfaces.ts b/ui/src/interfaces.ts index 59f4ba1c..ebd42340 100644 --- a/ui/src/interfaces.ts +++ b/ui/src/interfaces.ts @@ -1,5 +1,5 @@ export enum UserOperation { - Login, Register, CreateCommunity, CreatePost, ListCommunities, ListCategories, GetPost, GetCommunity, CreateComment, EditComment, SaveComment, CreateCommentLike, GetPosts, CreatePostLike, EditPost, SavePost, EditCommunity, FollowCommunity, GetFollowedCommunities, GetUserDetails, GetReplies, GetModlog, BanFromCommunity, AddModToCommunity, CreateSite, EditSite, GetSite, AddAdmin, BanUser, Search, MarkAllAsRead + Login, Register, CreateCommunity, CreatePost, ListCommunities, ListCategories, GetPost, GetCommunity, CreateComment, EditComment, SaveComment, CreateCommentLike, GetPosts, CreatePostLike, EditPost, SavePost, EditCommunity, FollowCommunity, GetFollowedCommunities, GetUserDetails, GetReplies, GetModlog, BanFromCommunity, AddModToCommunity, CreateSite, EditSite, GetSite, AddAdmin, BanUser, Search, MarkAllAsRead, SaveUserSettings } export enum CommentSortType { @@ -22,6 +22,7 @@ export interface User { id: number; iss: string; username: string; + show_nsfw: boolean; } export interface UserView { @@ -53,6 +54,7 @@ export interface Community { creator_id: number; removed: boolean; deleted: boolean; + nsfw: boolean; published: string; updated?: string; creator_name: string; @@ -74,11 +76,14 @@ export interface Post { removed: boolean; deleted: boolean; locked: boolean; + nsfw: boolean; published: string; updated?: string; creator_name: string; community_name: string; community_removed: boolean; + community_deleted: boolean; + community_nsfw: boolean; number_of_comments: number; score: number; upvotes: number; @@ -334,6 +339,7 @@ export interface RegisterForm { password: string; password_verify: string; admin: boolean; + show_nsfw: boolean; } export interface LoginResponse { @@ -341,7 +347,10 @@ export interface LoginResponse { jwt: string; } - +export interface UserSettingsForm { + show_nsfw: boolean; + auth: string; +} export interface CommunityForm { name: string; @@ -351,6 +360,7 @@ export interface CommunityForm { edit_id?: number; removed?: boolean; deleted?: boolean; + nsfw: boolean; reason?: string; expires?: number; auth?: string; @@ -396,6 +406,7 @@ export interface PostForm { creator_id: number; removed?: boolean; deleted?: boolean; + nsfw: boolean; locked?: boolean; reason?: string; auth: string; diff --git a/ui/src/services/WebSocketService.ts b/ui/src/services/WebSocketService.ts index c192c2b7..c34b6b3c 100644 --- a/ui/src/services/WebSocketService.ts +++ b/ui/src/services/WebSocketService.ts @@ -1,5 +1,5 @@ import { wsUri } from '../env'; -import { LoginForm, RegisterForm, UserOperation, CommunityForm, PostForm, SavePostForm, CommentForm, SaveCommentForm, CommentLikeForm, GetPostsForm, CreatePostLikeForm, FollowCommunityForm, GetUserDetailsForm, ListCommunitiesForm, GetModlogForm, BanFromCommunityForm, AddModToCommunityForm, AddAdminForm, BanUserForm, SiteForm, Site, UserView, GetRepliesForm, SearchForm } from '../interfaces'; +import { LoginForm, RegisterForm, UserOperation, CommunityForm, PostForm, SavePostForm, CommentForm, SaveCommentForm, CommentLikeForm, GetPostsForm, CreatePostLikeForm, FollowCommunityForm, GetUserDetailsForm, ListCommunitiesForm, GetModlogForm, BanFromCommunityForm, AddModToCommunityForm, AddAdminForm, BanUserForm, SiteForm, Site, UserView, GetRepliesForm, SearchForm, UserSettingsForm } from '../interfaces'; import { webSocket } from 'rxjs/webSocket'; import { Subject } from 'rxjs'; import { retryWhen, delay, take } from 'rxjs/operators'; @@ -184,6 +184,11 @@ export class WebSocketService { this.subject.next(this.wsSendWrapper(UserOperation.MarkAllAsRead, form)); } + public saveUserSettings(userSettingsForm: UserSettingsForm) { + this.setAuth(userSettingsForm); + this.subject.next(this.wsSendWrapper(UserOperation.SaveUserSettings, userSettingsForm)); + } + private wsSendWrapper(op: UserOperation, data: any) { let send = { op: UserOperation[op], data: data }; console.log(send); diff --git a/ui/src/translations/en.ts b/ui/src/translations/en.ts index 7c2b184f..1f79bef2 100644 --- a/ui/src/translations/en.ts +++ b/ui/src/translations/en.ts @@ -29,6 +29,7 @@ export const en = { mod: 'mod', mods: 'mods', moderates: 'Moderates', + settings: 'Settings', remove_as_mod: 'remove as mod', appoint_as_mod: 'appoint as mod', modlog: 'Modlog', @@ -112,6 +113,8 @@ export const en = { setup_admin: 'Set Up Site Administrator', your_site: 'your site', modified: 'modified', + nsfw: 'NSFW', + show_nsfw: 'Show NSFW content', sponsors: 'Sponsors', sponsors_of_lemmy: 'Sponsors of Lemmy', sponsor_message: 'Lemmy is free, <1>open-source software, meaning no advertising, monetizing, or venture capital, ever. Your donations directly support full-time development of the project. Thank you to the following people:', diff --git a/ui/tslint.json b/ui/tslint.json index d3e7a8a9..938502e4 100644 --- a/ui/tslint.json +++ b/ui/tslint.json @@ -2,7 +2,7 @@ "extends": "tslint:recommended", "rules": { "forin": false, - "indent": [ true, "tabs" ], + "indent": [ true, "spaces" ], "interface-name": false, "ban-types": true, "max-classes-per-file": true, diff --git a/ui/yarn.lock b/ui/yarn.lock index f47c16c4..f31f45ae 100644 --- a/ui/yarn.lock +++ b/ui/yarn.lock @@ -2773,7 +2773,7 @@ typescript@^2.6.2: resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.9.2.tgz#1cbf61d05d6b96269244eb6a3bce4bd914e0f00c" integrity sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w== -typescript@^3.3.3333: +typescript@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977" integrity sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g== -- cgit v1.2.3
#