Skip to content

Commit

Permalink
Merge pull request #378 from Cafnanc/release-2.6.0
Browse files Browse the repository at this point in the history
Add mentor / mentee
  • Loading branch information
kiranharidas187 committed Feb 1, 2024
2 parents b8512a2 + b11c9b5 commit ef37d26
Show file tree
Hide file tree
Showing 8 changed files with 68 additions and 53 deletions.
2 changes: 1 addition & 1 deletion src/app/core/services/session/session.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ export class SessionService {
async getSessionDetailsAPI(id) {
//await this.loaderService.startLoader();
const config = {
url: urlConstants.API_URLS.GET_SESSION_DETAILS + id,
url: urlConstants.API_URLS.GET_SESSION_DETAILS + id + '?get_mentees='+true,
payload: {}
};
try {
Expand Down
42 changes: 25 additions & 17 deletions src/app/pages/create-session/create-session.page.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import { TranslateService } from '@ngx-translate/core';
import { CREATE_SESSION_FORM, MANAGERS_CREATE_SESSION_FORM, PLATFORMS } from 'src/app/core/constants/formConstant';
import { FormService } from 'src/app/core/services/form/form.service';
import { map } from 'rxjs/operators';
import { Validators } from '@angular/forms';
import { AbstractControl, Validators } from '@angular/forms';
import { manageSessionAction, permissions } from 'src/app/core/constants/permissionsConstant';
import { PermissionService } from 'src/app/core/services/permission/permission.service';

Expand Down Expand Up @@ -81,9 +81,9 @@ export class CreateSessionPage implements OnInit {
) {
}
async ngOnInit() {
let formPage =(await this.permissionService.hasPermission({ module: permissions.MANAGE_SESSION, action: manageSessionAction.SESSION_ACTIONS })) ? MANAGERS_CREATE_SESSION_FORM : CREATE_SESSION_FORM
let formConfig =(await this.permissionService.hasPermission({ module: permissions.MANAGE_SESSION, action: manageSessionAction.SESSION_ACTIONS })) ? MANAGERS_CREATE_SESSION_FORM : CREATE_SESSION_FORM
const platformForm = await this.getPlatformFormDetails();
const result = await this.form.getForm(formPage);
const result = await this.form.getForm(formConfig);
this.formData = _.get(result, 'data.fields');
this.entityNames = await this.form.getEntityNames(this.formData)
this.entityList = await this.form.getEntities(this.entityNames, 'SESSION')
Expand Down Expand Up @@ -246,16 +246,23 @@ export class CreateSessionPage implements OnInit {
}
}
}

for (let i = 0; i < this.formData.controls.length; i++) {
this.formData.controls[i].value =
existingData[this.formData.controls[i].name];
if (this.formData.controls[i].type=='search'){
// this.formData.controls[i].meta.searchData = []
// this.formData.controls[i].meta.searchData.push({
// label: existingData.mentor_name+ ', '+existingData.organization.name,
// value: existingData[this.formData.controls[i].name]
// })
if(this.formData.controls[i].meta.multiSelect){
this.formData.controls[i].meta.searchData = existingData[this.formData.controls[i].name]
this.formData.controls[i].value = this.formData.controls[i].meta.searchData.map(obj => obj.id);
} else {
this.formData.controls[i].meta.searchData.push({
label: existingData.mentor_name+ ', '+existingData.organization.name,
id: existingData[this.formData.controls[i].name]
})
}
}
if(this.formData.controls[i].dependedChild && existingData[this.formData.controls[i].name].value=='PUBLIC'){
let dependedChildIndex = this.formData.controls.findIndex(formControl => formControl.name === this.formData.controls[i].dependedChild)
this.formData.controls[dependedChildIndex].validators['required']=false
}
this.formData.controls[i].options = _.unionBy(
this.formData.controls[i].options,
Expand Down Expand Up @@ -325,15 +332,16 @@ export class CreateSessionPage implements OnInit {
formValueChanged(event){
let dependedControlIndex = this.formData.controls.findIndex(formControl => formControl.name === event.dependedChild)
let dependedControl = this.form1.myForm.get(event.dependedChild)
if(event.value == "PUBLIC"){
this.formData.controls[dependedControlIndex].validators['required'] = false
dependedControl.setValidators(null);
dependedControl.setErrors(null)
dependedControl.updateValueAndValidity();
if(event.value === "PUBLIC") {
this.setControlValidity(dependedControlIndex, dependedControl, false);
} else {
this.formData.controls[dependedControlIndex].validators['required'] = true
dependedControl.setValidators([Validators.required]);
dependedControl.updateValueAndValidity();
this.setControlValidity(dependedControlIndex, dependedControl, true);
}
}

setControlValidity(index: number, control: AbstractControl, required: boolean) {
this.formData.controls[index].validators['required'] = required;
control.setValidators(required ? [Validators.required] : null);
control.updateValueAndValidity();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ interface JsonFormErrorMessages {
}

interface JsonFormControls {
searchData?: Array<object>;
name: string;
label: string;
value: string;
Expand All @@ -68,7 +69,7 @@ interface JsonFormControls {
displayFormat?: string;
dependedChild?: string;
dependedParent?: string;
meta?: Object;
meta?: any;
multiSelect?: boolean;
info?: Array<object>
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
<ion-item class="ion-margin-top">
<ion-chip *ngIf="control?.meta.multiSelect && selectedData.length" (click)="showPopover(control.meta)" [disabled]="control?.disabled">
<ion-icon class="icon" name="add-outline" color="dark"></ion-icon>
<ion-label>{{control?.label}}</ion-label>
<ion-label>{{control?.meta.labelForAddButton}}</ion-label>
</ion-chip>
<ion-chip (click)="control?.meta.multiSelect && selectedData.length ? viewSelectedList() : showPopover(control.meta)" [ngClass]="{'color-red': selectedData.length}" [disabled]="control?.disabled">
<ion-icon class="icon" [name]="icon.name" [color]="icon.color" (click)="handleIconClick($event)"></ion-icon>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import {
ControlValueAccessor,
NG_VALUE_ACCESSOR,
} from '@angular/forms';
import { PopoverController } from '@ionic/angular';
import { ModalController } from '@ionic/angular';
import { TranslateService } from '@ngx-translate/core';
import * as _ from 'lodash-es';
import { SearchPopoverComponent } from '../search-popover/search-popover.component';
Expand Down Expand Up @@ -34,7 +34,7 @@ export class SearchAndSelectComponent implements OnInit, ControlValueAccessor {
value: any[];

constructor(
private popoverCtrl: PopoverController,
private modalCtrl: ModalController,
private translateService: TranslateService
) { }

Expand Down Expand Up @@ -66,7 +66,7 @@ export class SearchAndSelectComponent implements OnInit, ControlValueAccessor {

async showPopover(event) {
this.markAsTouched();
const popover = await this.popoverCtrl.create({
const popover = await this.modalCtrl.create({
component: SearchPopoverComponent,
cssClass: 'search-popover-config',
backdropDismiss: false,
Expand All @@ -76,15 +76,15 @@ export class SearchAndSelectComponent implements OnInit, ControlValueAccessor {
control: this.control,
showFilter: true,
showSearch: true,
viewMode: false
viewListMode: false
}
}
});

popover.onDidDismiss().then((data) => {
if (data.data) {
this.selectedData = data.data;
const values = this.control.meta.multiSelect ? data.data.map(obj => obj.value) : data.data[0].value;
const values = this.control.meta.multiSelect ? data.data.map(obj => obj.id) : data.data[0].id;
this.onChange(values);
this.icon = this.selectedData.length ? this.closeIconLight : this.addIconDark
}
Expand All @@ -102,7 +102,7 @@ export class SearchAndSelectComponent implements OnInit, ControlValueAccessor {

async viewSelectedList() {
this.markAsTouched();
const popover = await this.popoverCtrl.create({
const popover = await this.modalCtrl.create({
component: SearchPopoverComponent,
cssClass: 'search-popover-config',
backdropDismiss: false,
Expand All @@ -112,7 +112,7 @@ export class SearchAndSelectComponent implements OnInit, ControlValueAccessor {
control: this.control,
showFilter: false,
showSearch: false,
viewMode: true
viewListMode: true
}
}
});
Expand All @@ -121,9 +121,10 @@ export class SearchAndSelectComponent implements OnInit, ControlValueAccessor {
if (data.data) {
this.selectedData = data.data
const values = this.selectedData.length
? (this.control.meta.multiSelect ? this.selectedData.map(obj => obj.value) : this.selectedData[0].value)
? (this.control.meta.multiSelect ? this.selectedData.map(obj => obj.id) : this.selectedData[0].id)
: (this.control.meta.multiSelect ? [] : '');
this.onChange(values);
this.icon = this.selectedData.length ? this.closeIconLight : this.addIconDark
}
});
await popover.present();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<ion-header [translucent]="true">
<ion-toolbar class="padding-top-10">
<ion-header>
<ion-toolbar class="padding-top-10" position="top">
<ion-grid class="ion-no-padding">
<ion-row class="ion-align-items-center">
<ion-col class="d-flex flex-justify-center" size="11">
Expand All @@ -12,7 +12,7 @@
</ion-grid>
</ion-toolbar>
</ion-header>
<ion-content [fullscreen]="true" class="ion-padding">
<ion-content class="ion-padding" scroll-y="false">
<ion-grid>
<ion-row class="ion-no-padding">
<ion-col class="col-width-25" *ngIf="data.showFilter" >
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,6 @@
margin: 15px;
}
.col-width-25 {
width: 25%;
max-width: 25%;
overflow: scroll;
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Component, Input, OnInit } from '@angular/core';
import { PopoverController } from '@ionic/angular';
import { ModalController } from '@ionic/angular';
import * as _ from 'lodash';
import { urlConstants } from 'src/app/core/constants/urlConstants';
import { HttpService, UtilService } from 'src/app/core/services';
Expand All @@ -18,7 +18,7 @@ export class SearchPopoverComponent implements OnInit {
{ name: 'designation', displayName: 'Designation', type: 'array' },
{ name: 'organization', displayName: 'Organisation', type: 'text' },
{ name: 'email', displayName: 'E-mail ID', type: 'text' },
{ name: 'enrollment_type', displayName: 'Enrollment Type', type: 'text' },
{ name: 'type', displayName: 'Enrollment Type', type: 'text' },
{ name: 'action', displayName: 'Actions', type: 'button' }
]

Expand All @@ -36,13 +36,22 @@ export class SearchPopoverComponent implements OnInit {
selectedList: any=[];
noDataMessage: string;

constructor(private popoverController: PopoverController, private util: UtilService, private httpService: HttpService) { }
constructor(private modalController: ModalController, private util: UtilService, private httpService: HttpService) { }

async ngOnInit() {
this.selectedList = this.data.selectedData ? this.data.selectedData : this.selectedList
this.tableData = await this.list()
this.filterData = await this.getFilters()
this.filterData = this.util.getFormatedFilterData(this.filterData, this.data.control.meta)
if (this.data.viewListMode) {
this.selectedList.forEach((ele) => {
ele.action = this.actionButtons.REMOVE;
ele.organization = ele?.organization?.name;
});
this.tableData = this.selectedList
this.filterData = [];
} else {
this.tableData = await this.getMenteelist();
this.filterData = await this.getFilters();
this.filterData = this.util.getFormatedFilterData(this.filterData, this.data.control.meta);
}
}

async getFilters() {
Expand All @@ -67,7 +76,7 @@ export class SearchPopoverComponent implements OnInit {
}
}

async list() {
async getMenteelist() {
const organizationsQueryParam = this.selectedFilters && this.selectedFilters.organizations
? '&organization_ids=' + this.selectedFilters.organizations.map(org => org.id).join(',')
: '';
Expand All @@ -83,16 +92,11 @@ export class SearchPopoverComponent implements OnInit {
const data: any = await this.httpService.get(config);
this.count = data.result.count
this.noDataMessage = this.searchText ? "SEARCH_RESULT_NOT_FOUND" : "THIS_SPACE_LOOKS_EMPTY"
let selectedIds = _.map(this.data.selectedData, 'value');
let selectedIds = _.map(this.selectedList, 'id');
data.result.data.forEach((ele) => {
ele.action = _.includes(selectedIds, ele.id) ? this.actionButtons.REMOVE : this.actionButtons.ADD;
ele.organization = ele?.organization?.name;
});
if(this.data.viewMode){
data.result.data = data.result.data.filter(obj1 =>
this.selectedList.some(obj2 => obj1.id === obj2.value)
);
}
return data.result.data
}
catch (error) {
Expand All @@ -101,39 +105,39 @@ export class SearchPopoverComponent implements OnInit {
}

closePopover() {
this.popoverController.dismiss(this.selectedList);
this.modalController.dismiss(this.selectedList);
}

async filtersChanged(event) {
this.selectedFilters = event
this.tableData = await this.list()
this.tableData = await this.getMenteelist()
}

async onSearch(){
this.tableData = await this.list()
this.tableData = await this.getMenteelist()
}

onCLickEvent(data: any) {
switch(data.action){
case 'add':
if(!this.data.control.meta .multiSelect){
this.popoverController.dismiss([{label: data.element.name+', '+data.element.organization, value: data.element.id}])
this.modalController.dismiss([{label: data.element.name+', '+data.element.organization, id: data.element.id, data: data.element}])
} else {
const index = this.tableData.findIndex(item => item.id === data.element.id);
this.tableData[index].action = this.actionButtons.REMOVE
let addedData = {label: data.element.name, value: data.element.id}
let addedData = data.element
this.selectedList.push(addedData)
}
break;

case 'remove':
const index = this.tableData.findIndex(item => item.id === data.element.id);
if(this.data.viewMode) {
if(this.data.viewListMode) {
this.tableData = this.tableData.filter(obj => obj.id !== data.element.id);
} else {
this.tableData[index].action = this.actionButtons.ADD
}
this.selectedList = this.selectedList.filter(obj => obj.value !== data.element.id);
this.selectedList = this.selectedList.filter(obj => obj.id !== data.element.id);
default:

}
Expand All @@ -142,6 +146,6 @@ export class SearchPopoverComponent implements OnInit {
async onPaginatorChange(data:any) {
this.page = data.page;
this.limit = data.pageSize
this.tableData = await this.list()
this.tableData = await this.getMenteelist()
}
}

0 comments on commit ef37d26

Please sign in to comment.