@@ -16,6 +16,7 @@ | |||
"@angular/platform-browser": "~13.1.0", | |||
"@angular/platform-browser-dynamic": "~13.1.0", | |||
"@angular/router": "~13.1.0", | |||
"@ng-select/ng-select": "^8.1.1", | |||
"echarts": "^5.3.0", | |||
"echarts-gl": "^2.0.8", | |||
"file-saver": "^2.0.5", | |||
@@ -2409,6 +2410,23 @@ | |||
"node": ">=6.0.0" | |||
} | |||
}, | |||
"node_modules/@ng-select/ng-select": { | |||
"version": "8.1.1", | |||
"resolved": "https://registry.npmjs.org/@ng-select/ng-select/-/ng-select-8.1.1.tgz", | |||
"integrity": "sha512-CP9Pve3L1aGqej38T9utdd6Waobbybwe9QIEObwicBI5fiIMAXwKT6lFT3fDLTUK/79y5nebiGtwTBfMm71Psg==", | |||
"dependencies": { | |||
"tslib": "^2.3.1" | |||
}, | |||
"engines": { | |||
"node": ">= 12.20.0", | |||
"npm": ">= 6.0.0" | |||
}, | |||
"peerDependencies": { | |||
"@angular/common": ">=13.0.0 <14.0.0", | |||
"@angular/core": ">=13.0.0 <14.0.0", | |||
"@angular/forms": ">=13.0.0 <14.0.0" | |||
} | |||
}, | |||
"node_modules/@ngtools/webpack": { | |||
"version": "13.2.3", | |||
"resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.2.3.tgz", | |||
@@ -13215,6 +13233,14 @@ | |||
"integrity": "sha512-cz8HFjOFfUBtvN+NXYSFMHYRdxZMaEl0XypVrhzxBgadKIXhIkRd8aMeHhmF56Sl7SuS8OnUpQ73/k9LE4VnLg==", | |||
"dev": true | |||
}, | |||
"@ng-select/ng-select": { | |||
"version": "8.1.1", | |||
"resolved": "https://registry.npmjs.org/@ng-select/ng-select/-/ng-select-8.1.1.tgz", | |||
"integrity": "sha512-CP9Pve3L1aGqej38T9utdd6Waobbybwe9QIEObwicBI5fiIMAXwKT6lFT3fDLTUK/79y5nebiGtwTBfMm71Psg==", | |||
"requires": { | |||
"tslib": "^2.3.1" | |||
} | |||
}, | |||
"@ngtools/webpack": { | |||
"version": "13.2.3", | |||
"resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.2.3.tgz", | |||
@@ -18,6 +18,7 @@ | |||
"@angular/platform-browser": "~13.1.0", | |||
"@angular/platform-browser-dynamic": "~13.1.0", | |||
"@angular/router": "~13.1.0", | |||
"@ng-select/ng-select": "^8.1.1", | |||
"echarts": "^5.3.0", | |||
"echarts-gl": "^2.0.8", | |||
"file-saver": "^2.0.5", | |||
@@ -0,0 +1,30 @@ | |||
.ng-select .ng-select-container { | |||
background: transparent; | |||
border: none; | |||
border-bottom: 2px solid var(--input-border) | |||
} | |||
.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-label { | |||
padding: 5px 8px; | |||
} | |||
.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value { | |||
background-color: transparent; | |||
border: 2px solid var(--input-border); | |||
border-radius: 3px; | |||
} | |||
.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left { | |||
border-right: 2px solid var(--input-border); | |||
} | |||
.ng-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container { | |||
border-color: inherit; | |||
background-color: inherit; | |||
outline: none; | |||
box-shadow: none; | |||
} | |||
.ng-select.ng-select-opened>.ng-select-container { | |||
background-color: transparent; | |||
} |
@@ -15,6 +15,7 @@ import { SettingsComponent } from './dashboard/settings/settings.component'; | |||
import { PartnerProfileService } from './services/partner-profile.service'; | |||
import { PartnerDetailsComponent } from './dashboard/partner-details/partner-details.component'; | |||
import { NgSelectModule } from '@ng-select/ng-select'; | |||
import { FormsModule } from '@angular/forms'; | |||
import { AuthService } from './services/auth.service'; | |||
@@ -34,6 +35,7 @@ import { AuthService } from './services/auth.service'; | |||
AppRoutingModule, | |||
BrowserAnimationsModule, | |||
HttpClientModule, | |||
NgSelectModule, | |||
FormsModule, | |||
NgxEchartsModule.forRoot({ | |||
echarts: () => import('echarts'), | |||
@@ -30,13 +30,13 @@ | |||
<div class="input-holder"> | |||
<input type="text" disabled="{{ !isFormEditable }}" | |||
[(ngModel)]="partnerDetails.primaryContact.designation"> | |||
<label> Name </label> | |||
<label> Designation </label> | |||
</div> | |||
<div class="input-holder"> | |||
<input type="text" disabled="{{ !isFormEditable }}" | |||
[(ngModel)]="partnerDetails.primaryContact.email"> | |||
<label> Name </label> | |||
<label> Email </label> | |||
</div> | |||
<div class="input-holder"> | |||
@@ -72,9 +72,11 @@ | |||
</div> | |||
<div class="input-holder"> | |||
<div class="text"> <button | |||
*ngFor="let area of partnerDetails.organizationBasicInfo.areasOfWork"> {{ area.name }} | |||
</button> </div> | |||
<ng-select [items]="areasOfWork" [readonly]="!isFormEditable" [multiple]="true" | |||
[closeOnSelect]="false" [searchable]="false" bindLabel="name" | |||
placeholder="Select areas of work" | |||
[(ngModel)]="partnerDetails.organizationBasicInfo.areasOfWork"> | |||
</ng-select> | |||
<label> Thematic areas of work </label> | |||
</div> | |||
@@ -164,27 +166,31 @@ | |||
</div> | |||
<div class="input-holder"> | |||
<div class="text"> | |||
<button *ngFor="let country of partnerDetails.detailedProfile.branchLocationCountries"> {{ | |||
country }} </button> | |||
</div> | |||
<ng-select [items]="countries" [readonly]="!isFormEditable" [multiple]="true" | |||
[closeOnSelect]="false" bindLabel="name" placeholder="Select countries" | |||
[(ngModel)]="partnerDetails.detailedProfile.branchLocationCountries"> | |||
</ng-select> | |||
<label> Branch or Field office Location (Countries) </label> | |||
</div> | |||
<div class="input-holder"> | |||
<div class="text"> | |||
<button *ngFor="let state of partnerDetails.detailedProfile.states"> {{ state }} </button> | |||
<ng-container *ngIf="hasIndiaBranchLocation()"> | |||
<div class="input-holder"> | |||
<ng-select [items]="states" [readonly]="!isFormEditable" [multiple]="true" | |||
[closeOnSelect]="false" [searchable]="false" bindLabel="name" | |||
placeholder="Select states" (change)="updateDistricts($event)" | |||
[(ngModel)]="partnerDetails.detailedProfile.states"> | |||
</ng-select> | |||
<label> Branch or Field office Location (States) </label> | |||
</div> | |||
<label> Branch or Field office Location (States) </label> | |||
</div> | |||
<div class="input-holder"> | |||
<div class="text"> | |||
<button *ngFor="let district of partnerDetails.detailedProfile.districts"> {{ district }} | |||
</button> | |||
<div class="input-holder"> | |||
<ng-select [items]="districts" [readonly]="!isFormEditable" [multiple]="true" | |||
[closeOnSelect]="false" [searchable]="false" bindLabel="name" | |||
placeholder="Select districts" [(ngModel)]="partnerDetails.detailedProfile.districts"> | |||
</ng-select> | |||
<label> Branch or Field office Location (Districts) </label> | |||
</div> | |||
<label> Branch or Field office Location (Districts) </label> | |||
</div> | |||
</ng-container> | |||
<div class="input-holder"> | |||
<input type="text" disabled="{{ !isFormEditable }}" | |||
@@ -193,26 +199,28 @@ | |||
</div> | |||
<div class="input-holder"> | |||
<div class="text"> | |||
<button *ngFor="let community of partnerDetails.detailedProfile.communities"> {{ community | |||
}} </button> | |||
</div> | |||
<ng-select [items]="communities" [readonly]="!isFormEditable" [multiple]="true" | |||
[closeOnSelect]="false" [searchable]="false" bindLabel="name" | |||
placeholder="Select communities" [(ngModel)]="partnerDetails.detailedProfile.communities"> | |||
</ng-select> | |||
<label> Which communities do you work with? </label> | |||
</div> | |||
<div class="input-holder"> | |||
<div class="text"> | |||
<button *ngFor="let mode of partnerDetails.detailedProfile.preferredModeOfCommunications"> | |||
{{ mode.name }} </button> | |||
</div> | |||
<ng-select [items]="preferredModesOfCommunication" [readonly]="!isFormEditable" | |||
[multiple]="true" [closeOnSelect]="false" [searchable]="false" bindLabel="name" | |||
placeholder="Select mode of communication" | |||
[(ngModel)]="partnerDetails.detailedProfile.preferredModeOfCommunications"> | |||
</ng-select> | |||
<label> Select your preferred mode of communications with the Collab</label> | |||
</div> | |||
<div class="input-holder"> | |||
<div class="text"> | |||
<button *ngFor="let language of partnerDetails.detailedProfile.preferredLanguages"> {{ | |||
language.name }} </button> | |||
</div> | |||
<ng-select [items]="preferredLanguages" [readonly]="!isFormEditable" [multiple]="true" | |||
[closeOnSelect]="false" [searchable]="false" bindLabel="name" | |||
placeholder="Select preferred Language" | |||
[(ngModel)]="partnerDetails.detailedProfile.preferredLanguages"> | |||
</ng-select> | |||
<label> Preferred Language of Communication* (emails, webinars etc. Select all that apply) | |||
</label> | |||
</div> | |||
@@ -241,11 +249,10 @@ | |||
<div class="container"> | |||
<div class="input-holder"> | |||
<div class="text"> | |||
<button | |||
*ngFor="let support of partnerDetails.strengthAndCapability.primaryAreasOfSupportRequired"> | |||
{{ support.name }} </button> | |||
</div> | |||
<ng-select [items]="areasOfSupport" [readonly]="!isFormEditable" [multiple]="true" | |||
[closeOnSelect]="false" [searchable]="false" bindLabel="name" placeholder="Select areas" | |||
[(ngModel)]="partnerDetails.strengthAndCapability.primaryAreasOfSupportRequired"> | |||
</ng-select> | |||
<label> What are the primary areas of support that you seek from #COVIDActionCollab? </label> | |||
</div> | |||
@@ -262,11 +269,10 @@ | |||
</div> | |||
<div class="input-holder"> | |||
<div class="text"> | |||
<button | |||
*ngFor="let support of partnerDetails.strengthAndCapability.primaryAreasOfSupportOffered"> | |||
{{ support.name }} </button> | |||
</div> | |||
<ng-select [items]="areasOfSupport" [readonly]="!isFormEditable" [multiple]="true" | |||
[closeOnSelect]="false" [searchable]="false" bindLabel="name" placeholder="Select areas" | |||
[(ngModel)]="partnerDetails.strengthAndCapability.primaryAreasOfSupportOffered"> | |||
</ng-select> | |||
<label> What are the areas in which you can support/contribute to the #COVIDActionCollab and its | |||
partners? </label> | |||
</div> | |||
@@ -1,7 +1,8 @@ | |||
import { Component, OnInit } from '@angular/core'; | |||
import { ActivatedRoute } from '@angular/router'; | |||
import * as Papa from 'papaparse'; | |||
import { UserData } from 'src/shared/structure/user'; | |||
import { AREAS_OF_WORK, COUNTRIES, STATES, COMMUNITIES, PREFERRED_MODE_OF_COMMUNICATION, PREFERRED_LANGUAGES, AREAS_OF_SUPPORT } from 'src/shared/data/form-options'; | |||
import { UserData, UserDataOption } from 'src/shared/structure/user'; | |||
import * as XLSX from 'xlsx' | |||
type ExportType = "CSV" | "XLSX"; | |||
@@ -17,6 +18,15 @@ export class PartnerDetailsComponent implements OnInit { | |||
selectedSegment: 1 | 2 | 3 = 1; | |||
showExportOptions: boolean = false; | |||
areasOfWork = AREAS_OF_WORK; | |||
countries = COUNTRIES; | |||
states = STATES; | |||
districts: Array<UserDataOption> = []; | |||
communities = COMMUNITIES; | |||
preferredModesOfCommunication = PREFERRED_MODE_OF_COMMUNICATION; | |||
preferredLanguages = PREFERRED_LANGUAGES; | |||
areasOfSupport = AREAS_OF_SUPPORT; | |||
exportData: Array<any> = []; | |||
exportSurveyCtoData: Array<any> = []; | |||
@@ -34,6 +44,15 @@ export class PartnerDetailsComponent implements OnInit { | |||
}).unsubscribe(); | |||
} | |||
hasIndiaBranchLocation() { | |||
return this.partnerDetails?.detailedProfile.branchLocationCountries.find(country => country.name === 'India'); | |||
} | |||
updateDistricts(states: Array<{ districts: Array<UserDataOption> }>) { | |||
console.log(states); | |||
this.districts = states.map(state => state.districts).flat(); | |||
} | |||
loadExportData(partnerData: UserData) { | |||
let exportData: Array<any> = []; | |||
@@ -1,7 +1,9 @@ | |||
/* You can add global styles to this file, and also import other style files */ | |||
@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@100;300;400;500;700&display=swap'); | |||
@import "~@ng-select/ng-select/themes/default.theme.css"; | |||
@import "./ng_select_custom_styles"; | |||
* { | |||
* { | |||
font-family: 'Roboto', sans-serif; | |||
margin: 0; | |||
padding: 0; | |||
@@ -41,7 +43,8 @@ | |||
border: none; | |||
transition: box-shadow 0.3s, color 0.3s, background-color 0.3s; | |||
&:hover, &:active { | |||
&:hover, | |||
&:active { | |||
box-shadow: 0 5px 5px -3px #0003, 0 8px 10px 1px #00000024, 0 3px 14px 2px #0000001f; | |||
} | |||
} | |||
@@ -95,7 +98,7 @@ | |||
border-top-left-radius: 0px; | |||
border-left: 0px; | |||
& + label { | |||
&+label { | |||
border: 2px solid var(--primary); | |||
border-radius: var(--common-border-radius); | |||
border-top-right-radius: 0px; | |||
@@ -121,7 +124,9 @@ | |||
border-bottom-left-radius: 0; | |||
} | |||
input, textarea, .text { | |||
input, | |||
textarea, | |||
.text { | |||
display: block; | |||
background-color: transparent; | |||
color: var(--primary-text); | |||
@@ -142,8 +147,8 @@ | |||
border-top: 0; | |||
border-top-right-radius: 0; | |||
border-top-left-radius: 0; | |||
& + label { | |||
&+label { | |||
color: var(--primary); | |||
font-weight: 500; | |||
border-color: var(--primary); | |||