Angular app for CAC desktop
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 
 

179 lignes
8.2 KiB

  1. import { Component, OnInit } from '@angular/core';
  2. import { PartnerProfileService } from '../../services/partner-profile.service';
  3. import { Router } from '@angular/router';
  4. import * as Papa from 'papaparse';
  5. import * as XLSX from 'xlsx'
  6. @Component({
  7. selector: 'app-table',
  8. templateUrl: './table.component.html',
  9. styleUrls: ['./table.component.scss']
  10. })
  11. export class TableComponent implements OnInit {
  12. userData: Array<any> = [];
  13. tempUserData: Array<any> = [];
  14. showExportOptions: boolean = false;
  15. shouldHaveImplementationData: boolean = false;
  16. searchText: string = '';
  17. selectedPartnerList: Array<any> = [];
  18. constructor(
  19. private partnerProfileService: PartnerProfileService,
  20. private router: Router
  21. ) { }
  22. ngOnInit(): void {
  23. this.getFilteredData();
  24. }
  25. getFilteredData() {
  26. this.partnerProfileService.getPartnersData().then((data: any) => {
  27. this.userData = data;
  28. if (this.shouldHaveImplementationData) {
  29. this.userData = this.userData.filter(user => {
  30. return (user.surveyCtoData.hiiData && user.surveyCtoData.hiiData.length > 0) ||
  31. (user.surveyCtoData.spData && user.surveyCtoData.spData.length > 0) ||
  32. (user.surveyCtoData.spSchemeData && user.surveyCtoData.spSchemeData.length > 0)
  33. });
  34. }
  35. if (this.searchText) {
  36. this.userData = this.userData.filter(user => {
  37. return user.organizationBasicInfo.name && user.organizationBasicInfo.name.toLowerCase().trim().includes(this.searchText.toLowerCase().trim());
  38. })
  39. }
  40. this.partialLoad(this.userData.slice(0, 10))
  41. console.log(this.userData);
  42. }, (e) => console.log(e));
  43. }
  44. partialLoad(data: Array<any>) {
  45. this.tempUserData = data;
  46. console.log(this.tempUserData);
  47. }
  48. loadMore() {
  49. this.partialLoad(this.userData.slice(0, this.tempUserData.length + 10));
  50. }
  51. showPartnerDetails(partner: any) {
  52. this.router.navigate(['dashboard/partners/partner-details'], { queryParams: { data: JSON.stringify(partner) } });
  53. }
  54. selectPartner(partner: any) {
  55. if (this.selectedPartnerList) {
  56. console.log(!this.checkedInput(partner))
  57. if (this.selectedPartnerList.some(x => JSON.stringify(x) === JSON.stringify(partner))) {
  58. this.selectedPartnerList = this.selectedPartnerList.filter(x => JSON.stringify(x) !== JSON.stringify(partner))
  59. } else this.selectedPartnerList.push(partner)
  60. }
  61. }
  62. loadExportData() {
  63. let tempArray = [];
  64. for (const partner of this.selectedPartnerList) {
  65. let csvArray = [{
  66. "PortalID": partner.portalId ? partner.portalId : '-',
  67. // Primary Contact
  68. "Primary Name": partner.primaryContact.contactNumber,
  69. "Primary Contact Number": partner.primaryContact.contactNumber,
  70. "Primary Email": partner.primaryContact.contactNumber,
  71. "Primary Designation": partner.primaryContact.contactNumber,
  72. // Basic Info
  73. "areasOfWork": partner.organizationBasicInfo.areasOfWork ? partner.organizationBasicInfo.areasOfWork.toString() : '',
  74. "name": partner.organizationBasicInfo.name,
  75. "reasonForBecomingMember": partner.organizationBasicInfo.reasonForBecomingMember,
  76. "referralName": partner.organizationBasicInfo.referralName,
  77. "source": partner.organizationBasicInfo.source,
  78. "type": partner.organizationBasicInfo.type,
  79. "website": partner.organizationBasicInfo.website,
  80. "wouldLikeUpdates": partner.organizationBasicInfo.wouldLikeUpdates,
  81. // Alternative Contact
  82. 'Alternative Name': partner.alternateContact.name,
  83. 'Alternative ContactNumber': partner.alternateContact.contactNumber,
  84. 'Alternative Email': partner.alternateContact.email,
  85. 'Alternative Designation': partner.alternateContact.designation,
  86. // Detailed Profile
  87. 'Bio': partner.detailedProfile.bio,
  88. 'Branch Location Countries': partner.detailedProfile.branchLocationCountries ? partner.detailedProfile.branchLocationCountries.toString() : '',
  89. "Communities": partner.detailedProfile.communities ? partner.detailedProfile.communities.toString() : '',
  90. "District": partner.detailedProfile.district,
  91. "Districts": partner.detailedProfile.districts ? partner.detailedProfile.districts.toString() : '',
  92. "Files": partner.detailedProfile.files,
  93. "Have Branches In Other Districts": partner.detailedProfile.haveBranchesInOtherDistricts,
  94. "Logo": partner.detailedProfile.logo,
  95. "Partner Location": partner.detailedProfile.partnerLocation,
  96. "Preferred Languages": partner.detailedProfile.preferredLanguages ? partner.detailedProfile.preferredLanguages.toString() : '',
  97. "Preferred Mode Of Communications": partner.detailedProfile.preferredModeOfCommunications ? partner.detailedProfile.preferredModeOfCommunications.toString() : '',
  98. "State": partner.detailedProfile.state,
  99. "States": partner.detailedProfile.states ? partner.detailedProfile.states.toString() : '',
  100. "Total Reach Of Organization": partner.detailedProfile.totalReachOfOrganization,
  101. "Year Of Establishment": partner.detailedProfile.yearOfEstablishment,
  102. // Strength
  103. "Other Specific Support Required": partner.strengthAndCapability.otherSpecificSupportRequired,
  104. "Primary Areas Of Support Offered": partner.strengthAndCapability.otherSpecificSupportRequired ? partner.strengthAndCapability.otherSpecificSupportRequired.toString() : '',
  105. "Primary Areas Of Support Offered Description": partner.strengthAndCapability.primaryAreasOfSupportOffered,
  106. "Primary Areas Of Support Offered Other": partner.strengthAndCapability.primaryAreasOfSupportOfferedDescription,
  107. "Primary Areas Of Support Required": partner.strengthAndCapability.primaryAreasOfSupportOfferedOther ? partner.strengthAndCapability.primaryAreasOfSupportOfferedOther.toString() : '',
  108. "Primary Areas Of Support Required Description": partner.strengthAndCapability.primaryAreasOfSupportRequired,
  109. "Primary Areas Of Support Required Other": partner.strengthAndCapability.primaryAreasOfSupportRequiredOther,
  110. }]
  111. tempArray.push(csvArray[0])
  112. }
  113. return tempArray;
  114. }
  115. checkedInput(partner: any) {
  116. return this.selectedPartnerList.some(x => JSON.stringify(x) === JSON.stringify(partner))
  117. }
  118. checkedAllInput() {
  119. return JSON.stringify(this.selectedPartnerList) === JSON.stringify(this.tempUserData)
  120. }
  121. selectAllPartner() {
  122. if (JSON.stringify(this.selectedPartnerList) === JSON.stringify(this.tempUserData)) {
  123. this.selectedPartnerList = []
  124. } else this.selectedPartnerList = this.tempUserData
  125. }
  126. exportProfileData(index: number) {
  127. let fileTypeXLS = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8';
  128. let fileTypeCSV = 'text/csv;charset=utf-8;';
  129. let fileExtension = index === 0 ? '.csv' : '.xlsx';
  130. let element = document.createElement('a');
  131. let blob;
  132. if (index === 0) {
  133. let csvData = Papa.unparse(this.loadExportData());
  134. blob = new Blob([csvData], { type: fileTypeCSV });
  135. } else {
  136. let ws = XLSX.utils.json_to_sheet(this.loadExportData());
  137. let wb = { Sheets: { 'data': ws }, SheetNames: ['data'] };
  138. let excelBuffer = XLSX.write(wb, { bookType: 'xlsx', type: 'array' });
  139. blob = new Blob([excelBuffer], { type: fileTypeXLS });
  140. }
  141. let url = URL.createObjectURL(blob);
  142. element.href = url;
  143. element.setAttribute('download', 'PartnerProfile' + fileExtension);
  144. element.click();
  145. }
  146. }