import { DataSource } from '@angular/cdk/table'; import { BehaviorSubject, Observable, merge, of } from 'rxjs'; import { map } from 'rxjs/operators'; import { CollectionViewer } from '@angular/cdk/collections'; import { FixBonus } from 'src/modules/special/fix-bonus/model/fix-bonus.model'; import { FixBonusService } from 'src/modules/special/fix-bonus/service/fix-bonus.service'; import { FormControl, FormGroup, Validators, FormArray } from '@angular/forms'; const ELEMENT_DATA: FixBonus[] = [ { gameType: 'gameType1', gameDescription: '크로스', userDescription: '[ 3폴더 ] 이상 조합가능 보너스 ㅡㅡㅡ 1.2배당 이상경기만 인정', odds: '1.03', folder: 3, allow: false, createdAt: null, updatedAt: null }, { gameType: 'gameType2', gameDescription: '크로스', userDescription: '[ 3폴더 ] 이상 조합가능 보너스 ㅡㅡㅡ 1.2배당 이상경기만 인정', odds: '1.03', folder: 3, allow: false, createdAt: null, updatedAt: null }, { gameType: 'gameType3', gameDescription: '크로스', userDescription: '[ 3폴더 ] 이상 조합가능 보너스 ㅡㅡㅡ 1.2배당 이상경기만 인정', odds: '1.03', folder: 3, allow: false, createdAt: null, updatedAt: null }, { gameType: 'gameType4', gameDescription: '가상축구', userDescription: '[ 3폴더 ] 이상 조합가능 보너스 ㅡㅡㅡ 1.2배당 이상경기만 인정', odds: '1.03', folder: 3, allow: false, createdAt: null, updatedAt: null }, { gameType: 'gameType5', gameDescription: '가상축구', userDescription: '[ 3폴더 ] 이상 조합가능 보너스 ㅡㅡㅡ 1.2배당 이상경기만 인정', odds: '1.03', folder: 3, allow: false, createdAt: null, updatedAt: null }, { gameType: 'gameType6', gameDescription: '가상축구', userDescription: '[ 3폴더 ] 이상 조합가능 보너스 ㅡㅡㅡ 1.2배당 이상경기만 인정', odds: '1.03', folder: 3, allow: false, createdAt: null, updatedAt: null }, { gameType: 'gameType7', gameDescription: '스페셜', userDescription: '[ 3폴더 ] 이상 조합가능 보너스 ㅡㅡㅡ 1.2배당 이상경기만 인정', odds: '1.03', folder: 3, allow: false, createdAt: null, updatedAt: null }, { gameType: 'gameType8', gameDescription: '스페셜', userDescription: '[ 3폴더 ] 이상 조합가능 보너스 ㅡㅡㅡ 1.2배당 이상경기만 인정', odds: '1.03', folder: 3, allow: false, createdAt: null, updatedAt: null }, { gameType: 'gameType9', gameDescription: '스페셜', userDescription: '[ 3폴더 ] 이상 조합가능 보너스 ㅡㅡㅡ 1.2배당 이상경기만 인정', odds: '1.03', folder: 3, allow: false, createdAt: null, updatedAt: null }, { gameType: 'gameType10', gameDescription: '실시간', userDescription: '[ 3폴더 ] 이상 조합가능 보너스 ㅡㅡㅡ 1.2배당 이상경기만 인정', odds: '1.03', folder: 3, allow: false, createdAt: null, updatedAt: null }, { gameType: 'gameType11', gameDescription: '실시간', userDescription: '[ 3폴더 ] 이상 조합가능 보너스 ㅡㅡㅡ 1.2배당 이상경기만 인정', odds: '1.03', folder: 3, allow: false, createdAt: null, updatedAt: null }, { gameType: 'gameType12', gameDescription: '실시간', userDescription: '[ 3폴더 ] 이상 조합가능 보너스 ㅡㅡㅡ 1.2배당 이상경기만 인정', odds: '1.03', folder: 3, allow: false, createdAt: null, updatedAt: null }, { gameType: 'gameType13', gameDescription: '개경주', userDescription: '[ 3폴더 ] 이상 조합가능 보너스 ㅡㅡㅡ 1.2배당 이상경기만 인정', odds: '1.03', folder: 3, allow: false, createdAt: null, updatedAt: null } ]; export class FixBonusDataSource extends DataSource { private _objectStore: FixBonus[] = []; private _ObjectsSubject$ = new BehaviorSubject([]); private _loadingSubject$ = new BehaviorSubject(false); public loading$ = this._loadingSubject$.asObservable(); public formg: FormGroup; constructor(private fixBonusService: FixBonusService) { super(); } connect(collectionViewer: CollectionViewer): Observable { // return this.fixBonusService.getAll().pipe( // map(res => { // res.forEach(m => this._objectStore.push(m as FixBonus)); // this._ObjectsSubject$.next(this._objectStore); // let fa = this.formg.get('formarray'); // res.forEach(r => fa.push(this.createRowFormGroup(r))); // return res; // }) // ); return of(ELEMENT_DATA).pipe( map(res => { res.forEach(m => this._objectStore.push(m as FixBonus)); this._ObjectsSubject$.next(this._objectStore); let fa = this.formg.get('formarray'); res.forEach(r => fa.push(this.createRowFormGroup(r))); return res; }) ); } createRowFormGroup(r: FixBonus): FormGroup { let f = new FormGroup({ gameType: this.createNewFormContorl(r, 'gameType'), gameDescription: this.createNewFormContorl(r, 'gameDescription'), userDescription: this.createNewFormContorl(r, 'userDescription'), odds: this.createNewFormContorl(r, 'odds'), folder: this.createNewFormContorl(r, 'folder'), allow: this.createNewFormContorl(r, 'allow') }); return f; } createNewFormContorl(r: FixBonus, propName: string): FormControl { let m = new FormControl(r[propName], Validators.required); m.valueChanges.subscribe(val => { r[propName] = val; }); return m; } disconnect(collectionViewer: CollectionViewer): void { this._ObjectsSubject$.complete(); this._loadingSubject$.complete(); } }