Skip to content
This repository has been archived by the owner on Jul 11, 2022. It is now read-only.

This is a temporary fix #194

Open
github-actions bot opened this issue Mar 9, 2021 · 0 comments
Open

This is a temporary fix #194

github-actions bot opened this issue Mar 9, 2021 · 0 comments
Labels

Comments

@github-actions
Copy link

github-actions bot commented Mar 9, 2021

This is a temporary fix

When its a comment on an answer it dont contains a question id which is required

Currently as a workaround I obtain the id from the answer service

// TODO: This is a temporary fix

import { Router } from '@angular/router';

import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';

import { IResponse } from 'src/app/interfaces/response';
import { SitesService } from 'src/app/services/sites/sites.service';
import { AnswerService } from 'src/app/services/answer/answer.service';
import { NotificationService } from 'src/app/services/notification/notification.service';

@Component({
  selector: 'app-notification',
  templateUrl: './notification.page.html',
  styleUrls: ['./notification.page.scss'],
})
export class NotificationPage implements OnInit, OnDestroy {
  public section: 'inbox' | 'achievements';

  public inbox: Array<any>;
  public inboxUnreadCount: number;
  public achievements: Array<any>;
  public achievementsUnreadCount: number;

  private inboxPage: number;
  private achievementsPage: number;
  private destroy: Subject<any>;

  constructor(
    private router: Router,
    private siteService: SitesService,
    private answerService: AnswerService,
    private notificationService: NotificationService,
  ) {}

  ngOnInit(): void {
    this.section = 'inbox';

    this.inboxPage = 1;
    this.achievementsPage = 1;
    this.destroy = new Subject<any>();

    this.notificationService
      .inbox()
      .pipe(takeUntil(this.destroy))
      .subscribe(inbox => {
        this.inbox = inbox;
        this.inboxUnreadCount = this.countUnread(inbox);
      });

    this.notificationService
      .achievements()
      .pipe(takeUntil(this.destroy))
      .subscribe(achievements => {
        this.achievements = achievements;
        this.achievementsUnreadCount = this.countUnread(achievements);
      });
  }

  ngOnDestroy(): void {
    this.destroy.next();
    this.destroy.complete();
  }

  public async forwardInternally(item): Promise<void> {
    await this.siteService.setCurrentSite(item.site || item.on_site);

    const linkSplited: Array<string> = item.link.split('/');

    switch (item.item_type || item.achievement_type) {
      case 'reputation':
        if (this.specialReputation(item)) {
          break;
        }
        this.router.navigateByUrl(linkSplited[linkSplited.length - 1].includes('#') ?
          `/menu/pages/question/${linkSplited[4]}/${linkSplited[5]}/answer/${linkSplited[6]}` :
          `/menu/pages/question/${linkSplited[4]}/${linkSplited[5]}`);
        break;
      case 'new_answer':
        this.router.navigateByUrl(`/menu/pages/question/${item.question_id}/${item.title}/answer/${item.answer_id}`);
        break;
      case 'comment':
        // TODO: This is a temporary fix
        // When its a comment on an answer it dont contains a question id which is required
        // Currently as a workaround I obtain the id from the answer service
        if (item.question_id) {
          this.router.navigateByUrl(`/menu/pages/question/${item.question_id}/${item.title}/comment/${item.comment_id}`);
        }
        if (item.answer_id) {
          this.answerService.getQuestions(item.answer_id).subscribe((response: IResponse) => {
            this.router.navigateByUrl(`/menu/pages/question/${response.items[0].question_id}/${item.title}/comment/${item.comment_id}`);
          });
        }
        break;
      case 'help':
        console.log(['NOTIFICATION HAPE: HELP', item])
        break;
    }
  }

  public countUnread(items: any): number {
    if (!items || items.length === 0) {
      return 0;
    }

    return items
      .map(item => item.is_unread ? 1 : 0)
      .reduce((accumulator, currentValue) => accumulator + currentValue);
  }

  public loadMoreInboxItems(event?: any): void {
    this.inboxPage++;

    this.notificationService
      .getInbox({ page: this.inboxPage })
      .subscribe((response: IResponse) => {
        this.inbox = this.inbox.concat(response.items as Array<any>);

        if (event) {
          event.target.complete();
          if (!response.has_more) { event.target.disabled = true; }
        }
      });
  }
  public loadMoreAchievements(event?: any): void {
    this.achievementsPage++;

    this.notificationService
      .getAchievements({ page: this.achievementsPage })
      .subscribe((response: IResponse) => {
        this.achievements = this.achievements.concat(response.items as Array<any>);

        if (event) {
          event.target.complete();
          if (!response.has_more) { event.target.disabled = true; }
        }
      });
  }

  private specialReputation(item: any): boolean {
    // TODO: Create pages to redirect when its a special reputation
    return item.achievement_type === 'badge' ||
      item.title.includes('bonus of 100 reputation because we trust you on other sites in the network') ||
      item.title.includes('User was removed');
  }
}
ew file mode 100644
ndex 00000000..64c15a67
++ b/src/app/pages/tabs/search/search-help/search-help.component.html

103b849ea4ec07f023deb03700b448a6f4d6e477

@github-actions github-actions bot added the todo label Mar 9, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

0 participants