File

src/lib/components/tag-all-discussion/tag-all-discussion.component.ts

Implements

OnInit

Metadata

Index

Properties
Methods
Inputs
Outputs

Constructor

constructor(route: ActivatedRoute, router: Router, discussService: DiscussionService, activatedRoute: ActivatedRoute, configService: ConfigService, telemetryUtils: TelemetryUtilsService, discussUtils: DiscussUtilsService, navigationService: NavigationServiceService)
Parameters :
Name Type Optional
route ActivatedRoute No
router Router No
discussService DiscussionService No
activatedRoute ActivatedRoute No
configService ConfigService No
telemetryUtils TelemetryUtilsService No
discussUtils DiscussUtilsService No
navigationService NavigationServiceService No

Inputs

widgetcIds
Type : any
widgetTagName
Type : any

Outputs

stateChange
Type : EventEmitter<any>

Methods

fetchContextBasedTagDetails
fetchContextBasedTagDetails(tagname: string, cid: any, page?: any)

Method to fetch the context based discussions

Parameters :
Name Type Optional
tagname string No
cid any No
page any Yes
Returns : void
fetchSingleTagDetails
fetchSingleTagDetails(tagname: string, page?: any)

Method to fetch the tag based discussion

Parameters :
Name Type Optional
tagname string No
page any Yes
Returns : void
Public getBgColor
getBgColor(tagTitle: any)
Parameters :
Name Type Optional
tagTitle any No
Returns : { color: any; 'background-color': any; }
logTelemetry
logTelemetry(event)
Parameters :
Name Optional
event No
Returns : void
navigateToDiscussionDetails
navigateToDiscussionDetails(discussionData)

Method to navigate to the dicussion detail page on click of tag related discussion

Parameters :
Name Optional
discussionData No
Returns : void
navigateWithPage
navigateWithPage(page: any)
Parameters :
Name Type Optional
page any No
Returns : void
ngOnInit
ngOnInit()
Returns : void
setPagination
setPagination()
Returns : void

Properties

Public activatedRoute
Type : ActivatedRoute
cIds
Type : any
currentActivePage
defaultError
Type : string
Default value : 'Something went wrong, Please try again after sometime!'
fetchNewData
Default value : false
fetchSingleCategoryLoader
Default value : false
getParams
Type : any
pager
Type : object
Default value : {}
paginationData
Type : any
paramsSubscription
Type : Subscription
queryParam
Type : any
routeParams
Type : any
similarPosts
Type : any[]
tagName
Type : any
import { Component, Input, OnInit, EventEmitter, Output } from '@angular/core'
import { NSDiscussData } from '../../models/discuss.model'
import { Router, ActivatedRoute } from '@angular/router'
import { DiscussionService } from '../../services/discussion.service';
/* tslint:disable */
import _ from 'lodash'
import { Subscriber, Subscription } from 'rxjs';
import { ConfigService } from '../../services/config.service';
import * as CONSTANTS from './../../common/constants.json';
import { DiscussUtilsService } from '../../services/discuss-utils.service';
import { TelemetryUtilsService } from './../../telemetry-utils.service';
import { NavigationServiceService } from '../../navigation-service.service';

@Component({
  selector: 'lib-tag-all-discussion',
  templateUrl: './tag-all-discussion.component.html',
  styleUrls: ['./tag-all-discussion.component.scss']
})
export class TagAllDiscussionComponent implements OnInit {
  @Input() widgetTagName: any;
  @Input() widgetcIds: any;

  @Output() stateChange: EventEmitter<any> = new EventEmitter();

  routeParams: any;
  tagName!: any
  similarPosts :any[]
  queryParam: any
  fetchSingleCategoryLoader = false
  currentActivePage: 1
  defaultError = 'Something went wrong, Please try again after sometime!'
  pager = {}
  paginationData!: any
  fetchNewData = false
  paramsSubscription: Subscription;
  getParams: any;
  cIds: any;

  constructor(
    private route: ActivatedRoute,
    private router: Router,
    private discussService: DiscussionService, 
    public activatedRoute: ActivatedRoute,
    private configService: ConfigService,
    private telemetryUtils: TelemetryUtilsService,
    private discussUtils: DiscussUtilsService,
    private navigationService: NavigationServiceService
  ) { }

  ngOnInit() {
    // debugger
    this.cIds = this.widgetcIds? this.widgetcIds: this.configService.getCategories()

    if(this.widgetTagName)
    {
      this.tagName = this.widgetTagName;
    }
    else
    {
      this.activatedRoute.queryParams.subscribe((params) => {
        this.tagName = params.tagname ? params.tagname: this.tagName
      })
    }
    
    // To check wheather any contexts are there or not from the config service
    if (this.configService.hasContext() || this.widgetcIds) {
      this.fetchContextBasedTagDetails(this.tagName, this.cIds, this.currentActivePage)
    } else {
      this.fetchSingleTagDetails(this.tagName, this.currentActivePage)
    }

  }

  /**Method to fetch the tag based discussion */
  fetchSingleTagDetails(tagname: string, page?: any) {
    this.fetchSingleCategoryLoader = true
    this.discussService.getTagBasedDiscussion(tagname).subscribe(
      (data: NSDiscussData.IDiscussionData) => {
        this.similarPosts = data.topics
        this.paginationData = data.pagination
        this.fetchSingleCategoryLoader = false
        this.setPagination()
      },
      (err: any) => {
        console.error('Error in fetching single tag details', err)
        // this.openSnackbar(err.error.message.split('|')[1] || this.defaultError)
        this.fetchSingleCategoryLoader = false
      })
  }

  /** Method to fetch the context based discussions */
  fetchContextBasedTagDetails(tagname: string, cid: any, page?: any) {
    this.fetchSingleCategoryLoader = true
    const req = {
      cid: cid.result,
      tag: tagname
    };

    this.discussService.getContextBasedTagDiscussion(req).subscribe(
      (data: NSDiscussData.IDiscussionData) => {
        this.similarPosts = data.result
        // this.paginationData = data.pagination
        this.fetchSingleCategoryLoader = false
        this.setPagination()
      },
      (err: any) => {
        console.error('Error in fetching context based tag details', err)
        // this.openSnackbar(err.error.message.split('|')[1] || this.defaultError)
        this.fetchSingleCategoryLoader = false
      })
  }


  // TODO : for pagination
  // getNextData(tagname: string, page: any) {
  //   return this.discussService.fetchNextTagD(tagname, page).subscribe(
  //     (data: any) => {
  //       this.paginationData = data.pagination
  //       this.setPagination()
  //       this.similarPosts = _.get(data, 'topics')
  //     })
  // }

  setPagination() {
    this.pager = {
      startIndex: this.paginationData.first.page,
      endIndex: this.paginationData.last.page,
      pages: this.paginationData.pages,
      currentPage: this.paginationData.currentPage,
      totalPage: this.paginationData.pageCount,
    }
  }

  navigateWithPage(page: any) {
    if (page !== this.currentActivePage) {
      this.fetchNewData = true
      this.router.navigate([`${this.configService.getRouterSlug()}${CONSTANTS.ROUTES.TAG}tag-discussions`], { queryParams: { page, tagname: this.queryParam },  queryParamsHandling: "merge"  });
    }
  }

  /** Method to navigate to the dicussion detail page on click of tag related discussion */
  navigateToDiscussionDetails(discussionData) {
    const matchedTopic = _.find(this.telemetryUtils.getContext(), { type: 'Topic' });
    if (matchedTopic) {
      this.telemetryUtils.deleteContext(matchedTopic);
    }

    this.telemetryUtils.uppendContext({
      id: _.get(discussionData, 'tid'),
      type: 'Topic'
    });

    let slug = _.trim(_.get(discussionData, 'slug'))
    let input = { data: { url: `${this.configService.getRouterSlug()}${CONSTANTS.ROUTES.TOPIC}${slug}`, queryParams: {} }, action: CONSTANTS.CATEGORY_DETAILS, }
    this.navigationService.navigate(input)
    this.stateChange.emit({ action: CONSTANTS.CATEGORY_DETAILS, title: discussionData.title, tid: discussionData.tid })

    // this.router.navigate([`${this.configService.getRouterSlug()}${CONSTANTS.ROUTES.TOPIC}${_.trim(_.get(discussionData, 'slug'))}`], { queryParamsHandling: "merge" });
  }

  logTelemetry(event) {
    this.telemetryUtils.logInteract(event, NSDiscussData.IPageName.HOME);
  }

  // TODO: add refershdata function
  // refreshData(tagname: string, page: any) {
  //   if (this.fetchNewData) {
  //     // this.getNextData(tagname, page)
  //   }
  // }

  // for tag color
  public getBgColor(tagTitle: any) {
    const bgColor = this.discussUtils.stringToColor(tagTitle.toLowerCase());
    const color = this.discussUtils.getContrast();
    return { color, 'background-color': bgColor };
  }

}
<div class="main-div">
    <div class="flex flex-1 margin-top-xl">
        <h2 class="margin-remove-bottom tagtitle" [ngStyle]="getBgColor(tagName)">{{tagName}}</h2>
    </div>
    <div>
        <span>&nbsp;</span>
    </div>
    <div class="flex flex-1 custom">
        <div class="flex flex-1 flex-column margin-fix">
            <lib-app-loader *ngIf="fetchSingleCategoryLoader"></lib-app-loader>

            <ng-container *ngIf="similarPosts && similarPosts.length > 0">
                <div (click)="navigateToDiscussionDetails(data);logTelemetry($event)"
                    *ngFor="let data of similarPosts" id="discuss-card">
                    <lib-discuss-card [discussionData]="data"></lib-discuss-card>
                </div>
            </ng-container>
            <ng-container *ngIf="!(similarPosts && similarPosts.length > 0)">
                <div class="no-card-content" tabindex="0"> 
                    <div class="no-data-label">No Data</div>
                    <div>
                        <span>&nbsp;</span>
                    </div>
                </div>
            </ng-container>
        </div>
    </div>
    <!-- <div class="flex flex-1 flex-column margin-top-xl margin-bottom-xl pagination-container">
        <ws-app-pagination [pager]="pager" (changePage)="navigateWithPage($event)"></ws-app-pagination>
    </div> -->
</div>

./tag-all-discussion.component.scss

.flex.flex-5 {
    flex-direction: column;
}

.tagtitle {
    margin: 0 0.25rem;
    padding: 0.25rem 1rem;
    min-width: 3.125rem;
    justify-content: center;
    border-radius: 1.25rem 0.25rem 0.25rem 1.25rem;
}
Legend
Html element
Component
Html element with directive

results matching ""

    No results matching ""