@@ -16,6 +16,7 @@ | |||||
"@angular/platform-browser": "~13.1.0", | "@angular/platform-browser": "~13.1.0", | ||||
"@angular/platform-browser-dynamic": "~13.1.0", | "@angular/platform-browser-dynamic": "~13.1.0", | ||||
"@angular/router": "~13.1.0", | "@angular/router": "~13.1.0", | ||||
"@ng-select/ng-select": "^8.1.1", | |||||
"echarts": "^5.3.0", | "echarts": "^5.3.0", | ||||
"echarts-gl": "^2.0.8", | "echarts-gl": "^2.0.8", | ||||
"file-saver": "^2.0.5", | "file-saver": "^2.0.5", | ||||
@@ -2409,6 +2410,23 @@ | |||||
"node": ">=6.0.0" | "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": { | "node_modules/@ngtools/webpack": { | ||||
"version": "13.2.3", | "version": "13.2.3", | ||||
"resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.2.3.tgz", | "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.2.3.tgz", | ||||
@@ -13215,6 +13233,14 @@ | |||||
"integrity": "sha512-cz8HFjOFfUBtvN+NXYSFMHYRdxZMaEl0XypVrhzxBgadKIXhIkRd8aMeHhmF56Sl7SuS8OnUpQ73/k9LE4VnLg==", | "integrity": "sha512-cz8HFjOFfUBtvN+NXYSFMHYRdxZMaEl0XypVrhzxBgadKIXhIkRd8aMeHhmF56Sl7SuS8OnUpQ73/k9LE4VnLg==", | ||||
"dev": true | "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": { | "@ngtools/webpack": { | ||||
"version": "13.2.3", | "version": "13.2.3", | ||||
"resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.2.3.tgz", | "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": "~13.1.0", | ||||
"@angular/platform-browser-dynamic": "~13.1.0", | "@angular/platform-browser-dynamic": "~13.1.0", | ||||
"@angular/router": "~13.1.0", | "@angular/router": "~13.1.0", | ||||
"@ng-select/ng-select": "^8.1.1", | |||||
"echarts": "^5.3.0", | "echarts": "^5.3.0", | ||||
"echarts-gl": "^2.0.8", | "echarts-gl": "^2.0.8", | ||||
"file-saver": "^2.0.5", | "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 { PartnerProfileService } from './services/partner-profile.service'; | ||||
import { PartnerDetailsComponent } from './dashboard/partner-details/partner-details.component'; | import { PartnerDetailsComponent } from './dashboard/partner-details/partner-details.component'; | ||||
import { NgSelectModule } from '@ng-select/ng-select'; | |||||
import { FormsModule } from '@angular/forms'; | import { FormsModule } from '@angular/forms'; | ||||
import { AuthService } from './services/auth.service'; | import { AuthService } from './services/auth.service'; | ||||
@@ -34,6 +35,7 @@ import { AuthService } from './services/auth.service'; | |||||
AppRoutingModule, | AppRoutingModule, | ||||
BrowserAnimationsModule, | BrowserAnimationsModule, | ||||
HttpClientModule, | HttpClientModule, | ||||
NgSelectModule, | |||||
FormsModule, | FormsModule, | ||||
NgxEchartsModule.forRoot({ | NgxEchartsModule.forRoot({ | ||||
echarts: () => import('echarts'), | echarts: () => import('echarts'), | ||||
@@ -30,13 +30,13 @@ | |||||
<div class="input-holder"> | <div class="input-holder"> | ||||
<input type="text" disabled="{{ !isFormEditable }}" | <input type="text" disabled="{{ !isFormEditable }}" | ||||
[(ngModel)]="partnerDetails.primaryContact.designation"> | [(ngModel)]="partnerDetails.primaryContact.designation"> | ||||
<label> Name </label> | |||||
<label> Designation </label> | |||||
</div> | </div> | ||||
<div class="input-holder"> | <div class="input-holder"> | ||||
<input type="text" disabled="{{ !isFormEditable }}" | <input type="text" disabled="{{ !isFormEditable }}" | ||||
[(ngModel)]="partnerDetails.primaryContact.email"> | [(ngModel)]="partnerDetails.primaryContact.email"> | ||||
<label> Name </label> | |||||
<label> Email </label> | |||||
</div> | </div> | ||||
<div class="input-holder"> | <div class="input-holder"> | ||||
@@ -72,9 +72,11 @@ | |||||
</div> | </div> | ||||
<div class="input-holder"> | <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> | <label> Thematic areas of work </label> | ||||
</div> | </div> | ||||
@@ -164,27 +166,31 @@ | |||||
</div> | </div> | ||||
<div class="input-holder"> | <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> | <label> Branch or Field office Location (Countries) </label> | ||||
</div> | </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> | </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> | </div> | ||||
<label> Branch or Field office Location (Districts) </label> | |||||
</div> | |||||
</ng-container> | |||||
<div class="input-holder"> | <div class="input-holder"> | ||||
<input type="text" disabled="{{ !isFormEditable }}" | <input type="text" disabled="{{ !isFormEditable }}" | ||||
@@ -193,26 +199,28 @@ | |||||
</div> | </div> | ||||
<div class="input-holder"> | <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> | <label> Which communities do you work with? </label> | ||||
</div> | </div> | ||||
<div class="input-holder"> | <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> | <label> Select your preferred mode of communications with the Collab</label> | ||||
</div> | </div> | ||||
<div class="input-holder"> | <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> Preferred Language of Communication* (emails, webinars etc. Select all that apply) | ||||
</label> | </label> | ||||
</div> | </div> | ||||
@@ -241,11 +249,10 @@ | |||||
<div class="container"> | <div class="container"> | ||||
<div class="input-holder"> | <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> | <label> What are the primary areas of support that you seek from #COVIDActionCollab? </label> | ||||
</div> | </div> | ||||
@@ -262,11 +269,10 @@ | |||||
</div> | </div> | ||||
<div class="input-holder"> | <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 | <label> What are the areas in which you can support/contribute to the #COVIDActionCollab and its | ||||
partners? </label> | partners? </label> | ||||
</div> | </div> | ||||
@@ -1,7 +1,8 @@ | |||||
import { Component, OnInit } from '@angular/core'; | import { Component, OnInit } from '@angular/core'; | ||||
import { ActivatedRoute } from '@angular/router'; | import { ActivatedRoute } from '@angular/router'; | ||||
import * as Papa from 'papaparse'; | 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' | import * as XLSX from 'xlsx' | ||||
type ExportType = "CSV" | "XLSX"; | type ExportType = "CSV" | "XLSX"; | ||||
@@ -17,6 +18,15 @@ export class PartnerDetailsComponent implements OnInit { | |||||
selectedSegment: 1 | 2 | 3 = 1; | selectedSegment: 1 | 2 | 3 = 1; | ||||
showExportOptions: boolean = false; | 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> = []; | exportData: Array<any> = []; | ||||
exportSurveyCtoData: Array<any> = []; | exportSurveyCtoData: Array<any> = []; | ||||
@@ -34,6 +44,15 @@ export class PartnerDetailsComponent implements OnInit { | |||||
}).unsubscribe(); | }).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) { | loadExportData(partnerData: UserData) { | ||||
let exportData: Array<any> = []; | let exportData: Array<any> = []; | ||||
@@ -1,7 +1,9 @@ | |||||
/* You can add global styles to this file, and also import other style files */ | /* 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 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; | font-family: 'Roboto', sans-serif; | ||||
margin: 0; | margin: 0; | ||||
padding: 0; | padding: 0; | ||||
@@ -41,7 +43,8 @@ | |||||
border: none; | border: none; | ||||
transition: box-shadow 0.3s, color 0.3s, background-color 0.3s; | 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; | 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-top-left-radius: 0px; | ||||
border-left: 0px; | border-left: 0px; | ||||
& + label { | |||||
&+label { | |||||
border: 2px solid var(--primary); | border: 2px solid var(--primary); | ||||
border-radius: var(--common-border-radius); | border-radius: var(--common-border-radius); | ||||
border-top-right-radius: 0px; | border-top-right-radius: 0px; | ||||
@@ -121,7 +124,9 @@ | |||||
border-bottom-left-radius: 0; | border-bottom-left-radius: 0; | ||||
} | } | ||||
input, textarea, .text { | |||||
input, | |||||
textarea, | |||||
.text { | |||||
display: block; | display: block; | ||||
background-color: transparent; | background-color: transparent; | ||||
color: var(--primary-text); | color: var(--primary-text); | ||||
@@ -142,8 +147,8 @@ | |||||
border-top: 0; | border-top: 0; | ||||
border-top-right-radius: 0; | border-top-right-radius: 0; | ||||
border-top-left-radius: 0; | border-top-left-radius: 0; | ||||
& + label { | |||||
&+label { | |||||
color: var(--primary); | color: var(--primary); | ||||
font-weight: 500; | font-weight: 500; | ||||
border-color: var(--primary); | border-color: var(--primary); | ||||