Advertisement
Guest User

Untitled

a guest
May 13th, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import { Component, OnInit, Input,ViewEncapsulation, ViewChild, ElementRef, Renderer2, AfterViewInit, ViewChildren, QueryList, ChangeDetectionStrategy, OnChanges, SimpleChanges} from '@angular/core';
  2. import { Subscription } from 'rxjs';
  3. import { PostService } from 'src/app/services/post.service';
  4. import { Post } from 'src/app/models/post.model';
  5. import { PostsGroup } from 'src/app/models/postsGroup.model';
  6. import { Thread } from 'src/app/models/thread.model';
  7. import { LocalStorage } from 'src/app/appSettings';
  8. import { ThreadService } from 'src/app/services/thread.service';
  9. import { LocalStorageThread } from 'src/app/models/LocalStorageThread.model';
  10. import { ActivatedRoute } from '@angular/router';
  11.  
  12. @Component({
  13.   selector: 'app-thread',
  14.   templateUrl: './thread.component.html',
  15.   styleUrls: ['./thread.component.sass'],
  16.   encapsulation: ViewEncapsulation.None
  17. })
  18. export class ThreadComponent implements OnInit,AfterViewInit, OnChanges  {
  19.   @Input() thread_id: number ;
  20.   @Input() post_id: number ;
  21.   @Input() showUnfollowedThread: boolean ;
  22.  
  23.   @ViewChildren('postsView') postsView: QueryList<any>;
  24.   postGroup : PostsGroup;
  25.   postSubscription: Subscription;
  26.   private sub: any;
  27.  
  28.   constructor(private PostService: PostService,
  29.               private ThreadService: ThreadService,
  30.               private renderer: Renderer2,
  31.               private route: ActivatedRoute) { }
  32.  
  33.   ngOnInit() {
  34.     // this.sub = this.route.params.subscribe(params => {
  35.     //   this.thread_id = +params['id']; // (+) converts string 'id' to a number
  36.  
  37.     //     // In a real app: dispatch action to load the details here.
  38.     // });
  39.  
  40.     this.postGroup = new PostsGroup(this.thread_id,null,[]);
  41.     this.postSubscription = this.PostService.postsSubject.subscribe(
  42.       (groupsPost: PostsGroup[]) => {
  43.         this.postGroup = groupsPost[this.thread_id];//this.findPost(this.thread_id, groupsPost);
  44.         // this.posts = posts;
  45.  
  46.       }
  47.     );
  48.     this.PostService.emitPostsSubject();
  49.     this.onFetch();
  50.   }
  51.   ngAfterViewInit() {
  52.     this.postsView.changes.subscribe(t => {
  53.       this.ngForRendred();
  54.     })
  55.   }
  56.   ngOnChanges(changes: SimpleChanges) {
  57.     // this will be called each time userInput changes
  58.     this.ngOnInit();
  59.   }
  60.  
  61.   ngForRendred() {
  62.     this.autoScroll();
  63.   }
  64.   findPost(thread_id: number, postGroup: PostsGroup[]): PostsGroup {
  65.     for (let index = 0; index < postGroup.length; index++) {
  66.       let pg : PostsGroup = postGroup[index];
  67.       if(pg.thread_id == thread_id)
  68.         return pg;
  69.     }
  70.     return null;
  71.    
  72.    
  73.   }
  74.   onFetch() {
  75.     this.PostService.getPageOfPostById(this.thread_id,this.post_id);
  76.   }
  77.  
  78.   autoScroll() : void{
  79.     let currentPosts = this.postGroup.posts[this.postGroup.posts.length -1];
  80.     const fragment = "post-" + currentPosts.post_id;
  81.     const element = this.renderer.selectRootElement(`#${fragment}`, true);
  82.     element.scrollIntoView({ behavior: 'smooth', block: "start"  });
  83.   }
  84.   checkPostsGroup() : boolean{
  85.     if(this.postGroup != null && this.postGroup.posts!=null && this.postGroup.posts.length > 0)
  86.       return true;
  87.     return false;
  88.   }
  89.   checkForPreviousPost() : boolean{
  90.     if(this.postGroup != null && this.postGroup.last_page_id_loaded != null && this.postGroup.last_page_id_loaded >= 2)
  91.       return false;
  92.     return true;
  93.  
  94.   }
  95.   onLoadPreviousPosts(){
  96.     if(this.postGroup.last_page_id_loaded == null || this.postGroup.last_page_id_loaded < 1)
  97.       return;
  98.     this.postGroup.last_page_id_loaded--;
  99.     this.PostService.getPageByNumber(this.thread_id,this.postGroup.last_page_id_loaded);
  100.   }
  101.   onRead(){
  102.     let threadsViewed = <LocalStorageThread[]>JSON.parse(localStorage.getItem(LocalStorage.THREADS)) || [];
  103.     let i = this.findThreadViewed(threadsViewed,this.thread_id);
  104.     if(i == null)
  105.       threadsViewed.push(new LocalStorageThread(this.thread_id,this.postGroup.posts[this.postGroup.posts.length - 1].post_id, false));
  106.     else
  107.       threadsViewed[i] = new LocalStorageThread(this.thread_id,this.postGroup.posts[this.postGroup.posts.length - 1].post_id, false);
  108.    
  109.     localStorage.setItem(LocalStorage.THREADS, JSON.stringify( threadsViewed));
  110.     this.ThreadService.deleteThreadById(this.thread_id);
  111.     // <number[]>JSON.parse(localStorage.getItem('forum'))
  112.   }
  113.   onUnfollow(){
  114.     let threadsUnfollowed = <LocalStorageThread[]>JSON.parse(localStorage.getItem(LocalStorage.THREADS)) || [];
  115.     let i : number =  this.findThreadViewed(threadsUnfollowed,this.thread_id);
  116.     if(i == null)
  117.       threadsUnfollowed.push(new LocalStorageThread(this.thread_id,this.postGroup.posts[this.postGroup.posts.length - 1].post_id, true));
  118.     else
  119.       threadsUnfollowed[i] = new LocalStorageThread(this.thread_id,this.postGroup.posts[this.postGroup.posts.length - 1].post_id, true);
  120.  
  121.    
  122.    
  123.     localStorage.setItem(LocalStorage.THREADS, JSON.stringify( threadsUnfollowed));
  124.     this.ThreadService.deleteThreadById(this.thread_id);
  125.     // console.log(JSON.parse(localStorage.getItem(LocalStorage.THREADS)));
  126.   }
  127.   onfollow(){
  128.     let threadsfollowed = <LocalStorageThread[]>JSON.parse(localStorage.getItem(LocalStorage.THREADS)) || [];
  129.     let i : number =  this.findThreadViewed(threadsfollowed,this.thread_id);
  130.     if(i == null)
  131.       threadsfollowed.push(new LocalStorageThread(this.thread_id,this.postGroup.posts[this.postGroup.posts.length - 1].post_id, false));
  132.     else
  133.       threadsfollowed[i] = new LocalStorageThread(this.thread_id,this.postGroup.posts[this.postGroup.posts.length - 1].post_id, false);
  134.  
  135.    
  136.    
  137.     localStorage.setItem(LocalStorage.THREADS, JSON.stringify( threadsfollowed));
  138.     this.ThreadService.deleteThreadById(this.thread_id);
  139.     console.log(JSON.parse(localStorage.getItem(LocalStorage.THREADS)));
  140.   }
  141.  
  142.   findThreadViewed(array : LocalStorageThread[], findId) : number{
  143.     for (let index = 0; index < array.length; index++) {
  144.       const element = array[index];
  145.       if(element.thread_id == findId)
  146.         return index;
  147.      
  148.     }
  149.     return null;
  150.   }
  151. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement