import { Component, OnInit } from '@angular/core'; import { Subject } from 'rxjs'; import { FormGroup, FormBuilder, Validators } from '@angular/forms'; import { BsModalRef, BsModalService } from 'ngx-bootstrap'; import { AlertModalComponent } from '../common/alert-modal/alert-modal.component'; import { ToastrService } from 'ngx-toastr'; import { ReferService } from '../../services/refer.service'; @Component({ selector: 'app-referral-credits', templateUrl: './referral-credits.component.html', styleUrls: ['./referral-credits.component.css'] }) export class ReferralCreditsComponent implements OnInit { tableData: any[] = []; bsModalRef: BsModalRef; alertConfirm: any; masterSelected: boolean; checkedList: any; referralCreditsForm: FormGroup; isAllocateCreditsEnabled: boolean = false; dtTrigger: Subject = new Subject(); dtOptions: DataTables.Settings = {}; constructor(private referService: ReferService, private toastr: ToastrService, private fb: FormBuilder, private modalService: BsModalService) { } ngOnInit() { this.loadData(); this.referralCreditsForm = this.fb.group({ referred_by_amount: ['', {validators: [Validators.required, Validators.pattern(/^[0-9]*$/)] }], }); } loadData(){ this.referService.getReferralsPendingForCredits().subscribe( ( result: { status: string, message: string, data } ) => { this.tableData = []; let resultData = result.data; if(resultData){ for (let i = 0; i < resultData.length; i++) { this.tableData.push(result.data[i]); this.tableData[i].isSelected = false; } this.isAllocateCreditsEnabled = false; this.dtTrigger.next(); } }); this.dtOptions = { columnDefs: [{ type: 'date', 'targets': [1] }], order: [[1, 'desc']], scrollX: true } } /* @purpose: get all the selected referrals. */ getCheckedItemList() { this.checkedList = []; let index; for (index = 0; index < this.tableData.length; index++) { if (this.tableData[index].isSelected) this.checkedList.push(this.tableData[index]); } } enableButton(){ this.getCheckedItemList(); if (this.checkedList.length > 0) { this.isAllocateCreditsEnabled = true; } else { this.isAllocateCreditsEnabled = false; } } checkUncheckAll(){ this.masterSelected = !this.masterSelected; for (let i = 0; i < this.tableData.length; i++) { this.tableData[i].isSelected = this.masterSelected; } this.enableButton(); } rowSelectedUnselected(){ this.masterSelected = this.tableData.every(function (item: any) { return item.isSelected == true; }); this.enableButton(); } /* @usage: called when a form is submitted */ async onSubmit() { if( this.referralCreditsForm.get('referred_by_amount').value === '' ){ this.referralCreditsForm.controls['referred_by_amount'].markAllAsTouched(); } if( this.referralCreditsForm.valid ){ this.bsModalRef = this.modalService.show(AlertModalComponent, { backdrop: 'static', keyboard: false, animated: true, ignoreBackdropClick: true, initialState: { title: 'Alert', data: 'Are you sure to proceed?', buttonText: 'No', deleteBtn: 'Yes' } }); this.bsModalRef.content.event.subscribe(res => { this.alertConfirm = res; if (this.alertConfirm) { let referralCodes = [], referralAmount = this.referralCreditsForm.get('referred_by_amount').value;; for (let i = 0; i < this.checkedList.length; i++) { referralCodes.push(this.checkedList[i].referral_code); } const referrals: any = {}; referrals.referral_code = referralCodes; referrals.referred_by_amount = Number(referralAmount); this.referService.updateReferralCredits(referrals).subscribe((result: { status: string, message: string, data }) => { if (result.status === 'success') { let table = $('#invoiceGrid').DataTable(); this.masterSelected = false; this.referralCreditsForm.reset(); table.destroy(); this.toastr.success('Referral Credit added successfully.'); this.loadData(); } }, (error) => { let table = $('#invoiceGrid').DataTable(); table.destroy(); this.toastr.error('Referral Credit can not be added. Please try after sometime.'); this.loadData(); } ); } }); }else{ this.referralCreditsForm.controls['referred_by_amount'].markAllAsTouched(); } } get referred_by_amount() { return this.referralCreditsForm.get('referred_by_amount') } }