]> Untitled Git - lemmy.git/commitdiff
Adding similar post searching before creating post.
authorDessalines <tyhou13@gmx.com>
Mon, 29 Jul 2019 01:57:09 +0000 (18:57 -0700)
committerDessalines <tyhou13@gmx.com>
Mon, 29 Jul 2019 01:57:09 +0000 (18:57 -0700)
- Fixes #185.
- Offsetting create post and community columns.

ui/src/components/create-community.tsx
ui/src/components/create-post.tsx
ui/src/components/post-form.tsx
ui/src/components/search.tsx

index 5e31efc2ba7752c960530030915f1586da632a01..c2f89eef3311a5a7215124a8f8487db515cf13a7 100644 (file)
@@ -18,7 +18,7 @@ export class CreateCommunity extends Component<any, any> {
     return (
       <div class="container">
         <div class="row">
-          <div class="col-12 col-lg-6 mb-4">
+          <div class="col-12 col-lg-6 offset-lg-3 mb-4">
             <h5>Create Community</h5>
             <CommunityForm onCreate={this.handleCommunityCreate}/>
           </div>
index 0e37ba1d9cbb1b83e3e987d589a981823ed5f479..e09bcf703443f36fbe7a6da18c585d56907931da 100644 (file)
@@ -17,7 +17,7 @@ export class CreatePost extends Component<any, any> {
     return (
       <div class="container">
         <div class="row">
-          <div class="col-12 col-lg-6 mb-4">
+          <div class="col-12 col-lg-6 offset-lg-3 mb-4">
             <h5>Create a Post</h5>
             <PostForm onCreate={this.handlePostCreate} prevCommunityName={this.prevCommunityName} />
           </div>
index 50b4acd1c5f997d5fa854886e255e178f3f0e258..9b33c6e14c6ef9d5f6f52324dd8b49cf0cf53bae 100644 (file)
@@ -1,7 +1,8 @@
 import { Component, linkEvent } from 'inferno';
+import { PostListings } from './post-listings';
 import { Subscription } from "rxjs";
 import { retryWhen, delay, take } from 'rxjs/operators';
-import { PostForm as PostFormI, Post, PostResponse, UserOperation, Community, ListCommunitiesResponse, ListCommunitiesForm, SortType } from '../interfaces';
+import { PostForm as PostFormI, Post, PostResponse, UserOperation, Community, ListCommunitiesResponse, ListCommunitiesForm, SortType, SearchForm, SearchType, SearchResponse } from '../interfaces';
 import { WebSocketService, UserService } from '../services';
 import { msgOp, getPageTitle } from '../utils';
 import * as autosize from 'autosize';
@@ -19,6 +20,7 @@ interface PostFormState {
   communities: Array<Community>;
   loading: boolean;
   suggestedTitle: string;
+  suggestedPosts: Array<Post>;
 }
 
 export class PostForm extends Component<PostFormProps, PostFormState> {
@@ -34,6 +36,7 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
     communities: [],
     loading: false,
     suggestedTitle: undefined,
+    suggestedPosts: [],
   }
 
   constructor(props: any, context: any) {
@@ -86,7 +89,7 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
             <div class="col-sm-10">
               <input type="url" class="form-control" value={this.state.postForm.url} onInput={linkEvent(this, this.handlePostUrlChange)} />
               {this.state.suggestedTitle && 
-                <span class="text-muted small font-weight-bold pointer" onClick={linkEvent(this, this.copySuggestedTitle)}>copy suggested title: {this.state.suggestedTitle}</span>
+                <div class="mt-1 text-muted small font-weight-bold pointer" onClick={linkEvent(this, this.copySuggestedTitle)}>copy suggested title: {this.state.suggestedTitle}</div>
               }
             </div>
           </div>
@@ -94,6 +97,12 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
             <label class="col-sm-2 col-form-label">Title</label>
             <div class="col-sm-10">
               <textarea value={this.state.postForm.name} onInput={linkEvent(this, this.handlePostNameChange)} class="form-control" required rows={2} minLength={3} maxLength={100} />
+              {this.state.suggestedPosts.length > 0 && 
+                <>
+                  <div class="my-1 text-muted small font-weight-bold">These posts might be related</div>
+                  <PostListings posts={this.state.suggestedPosts} />
+                </>
+              }
             </div>
           </div>
           <div class="form-group row">
@@ -157,6 +166,22 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
 
   handlePostNameChange(i: PostForm, event: any) {
     i.state.postForm.name = event.target.value;
+
+    let form: SearchForm = {
+      q: i.state.postForm.name,
+      type_: SearchType[SearchType.Posts],
+      sort: SortType[SortType.TopAll],
+      community_id: i.state.postForm.community_id,
+      page: 1,
+      limit: 6,
+    };
+
+    if (i.state.postForm.name !== '') {
+      WebSocketService.Instance.search(form);
+    } else {
+      i.state.suggestedPosts = [];
+    }
+
     i.setState(i.state);
   }
 
@@ -201,6 +226,10 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
       this.state.loading = false;
       let res: PostResponse = msg;
       this.props.onEdit(res.post);
+    } else if (op == UserOperation.Search) {
+      let res: SearchResponse = msg;
+      this.state.suggestedPosts = res.posts;
+      this.setState(this.state);
     }
   }
 
index 0d3b255d017d3f6c6bac9aea09884d2b109356ef..ec657bb15fc20f95816e3e886563ad30b1716eb4 100644 (file)
@@ -253,7 +253,6 @@ export class Search extends Component<any, SearchState> {
       document.title = `Search - ${this.state.q} - ${WebSocketService.Instance.site.name}`;
       window.scrollTo(0,0);
       this.setState(this.state);
-      
     }
   }
 }