import { ChangeDetectorRef, Component, Inject, OnInit, ViewEncapsulation, } from '@angular/core'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; import { FuseAlertType } from '@fuse/components/alert'; import { SiteService } from 'app/modules/polyglot/site/services/site.service'; import { IdentityService } from 'app/modules/polyglot/identity/services/identity.service'; import { MemberService } from 'app/modules/polyglot/member/services/member.service'; import { CreateMemberRequest, CreateMemberResponse, } from 'app/modules/proto/c2se/member_pb'; import { Bank } from 'app/modules/proto/models/bank_pb'; import { Site } from 'app/modules/proto/models/site_pb'; import { MemberModel } from 'app/modules/proto/models/member_pb'; import { fuseAnimations } from '@fuse/animations'; import { BankService } from 'app/modules/polyglot/bank/services/bank.service'; export interface RegistComposeData { title: string; parent: MemberModel; classId: string; } export interface RegistComposeResult { choice: boolean; } @Component({ selector: 'app-regist-compose', templateUrl: './regist-compose.component.html', encapsulation: ViewEncapsulation.None, animations: fuseAnimations, }) export class RegistComposeComponent implements OnInit { composeForm!: FormGroup; sites!: Site[]; banks!: Bank[]; alert: { type: FuseAlertType; message: string } = { type: 'success', message: '등록이 성공하였습니다.', }; showAlert: boolean = false; isSendDisable = false; /** * Constructor */ constructor( private _changeDetectorRef: ChangeDetectorRef, public matDialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: RegistComposeData, private _formBuilder: FormBuilder, private _identityService: IdentityService, private _memberService: MemberService, private _siteService: SiteService, private _bankService: BankService ) {} // ----------------------------------------------------------------------------------------------------- // @ Lifecycle hooks // ----------------------------------------------------------------------------------------------------- /** * On init */ ngOnInit(): void { // Create the form this.composeForm = this._formBuilder.group({ partnerId: [{ value: this.data.parent.getUsername(), disabled: true }], siteName: ['', [Validators.required]], signinId: ['', [Validators.required]], password: ['beteran', [Validators.required]], exchangePw: ['', [Validators.required]], nickname: ['', [Validators.required]], calculateType: ['', [Validators.required]], phoneNumber: ['', [Validators.required]], bankName: ['', [Validators.required]], accountNumber: ['', [Validators.required]], accountHolder: ['', [Validators.required]], }); this._siteService .listSites() .then((result) => { this.sites = result.getSitesList(); }) .catch((reson) => console.log(reson)); this._bankService .listBanks() .then((result) => { this.banks = result.getBanksList(); }) .catch((reson) => console.log(reson)); } // ----------------------------------------------------------------------------------------------------- // @ Public methods // ----------------------------------------------------------------------------------------------------- /** * Save and close */ saveAndClose(): void { // Save the message as a draft this.saveAsDraft(); // Close the dialog this.matDialogRef.close(); } /** * Discard the message */ discard(): void {} /** * Save the message as a draft */ saveAsDraft(): void {} /** * Send the message * } */ send(): void { if (!this.composeForm.valid) { return; } this.isSendDisable = true; const { partnerId, siteName, signinId, password, exchangePassword, nickname, calculateType, phoneNumber, bankName, accountNumber, accountHolder, } = this.composeForm.value; const member = new CreateMemberRequest(); const site = new Site(); site.setId(siteName); member.setSiteId(siteName); member.setUsername(signinId); member.setPassword('beteran'); member.setMemberClassId(this.data.classId); member.setMemberLevelId('c56231ac-2120-4a81-a30a-5d41fafb6c57'); member.setReferrerMemberUsername(this.data.parent.getUsername()); member.setNickname(nickname); member.setMobilePhoneNumber(phoneNumber); this._memberService .createMember(member) .then((res: CreateMemberResponse.Result) => { console.log(res.getMember()); this.showAlert = true; }) .catch((e) => { this.showAlert = true; this.alert = { type: 'error', message: '등록에 실패하였습니다.' }; }) .finally(() => setTimeout(() => this.close(), 5000)); } private close(): void { this.matDialogRef.close({ choice: true, }); } __checkSigninId(event: FocusEvent): void { const signinId = this.composeForm.get('signinId')?.value; // console.log(event, '::', signinId); this._identityService .checkUsernameForDuplication(signinId) .then((isUse: boolean) => { if (!!isUse) { this.composeForm .get('signinId') ?.setErrors({ signinIdDuplicate: true }); } // this._changeDetectorRef.markForCheck(); }); } __checkNickname(event: FocusEvent): void { const nickname = this.composeForm.get('nickname')?.value; this._identityService .checkNicknameForDuplication(nickname) .then((isUse: boolean) => { if (!!isUse) { this.composeForm .get('nickname') ?.setErrors({ nicknameDuplicate: true }); } // this._changeDetectorRef.markForCheck(); }); } }