244 lines
7.1 KiB
TypeScript
244 lines
7.1 KiB
TypeScript
import { Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';
|
|
import { CookiesService } from '../../services/cookies.service';
|
|
import { ActivatedRoute, Router } from '@angular/router';
|
|
import { MainPageCode, Page, PageCode } from '../../interface/data';
|
|
import { environment } from '../../../environments/environment';
|
|
import { PageList, PageListMain, PageListWithBonus } from '../../app.constants';
|
|
import { HttpErrorResponse, HttpParams } from '@angular/common/http';
|
|
import { ExitComponent } from '../../components/exit/exit.component';
|
|
import { DialogService, DynamicDialogRef } from 'primeng/dynamicdialog';
|
|
import { JsonrpcService, RpcService } from 'src/app/services/jsonrpc.service';
|
|
import { MessageService } from 'primeng/api';
|
|
import { lastValueFrom } from 'rxjs';
|
|
import { CartService } from 'src/app/services/cart.service';
|
|
import { Store } from '@ngrx/store';
|
|
import { getProfile, getTransactions, getTransactionsInfo } from 'src/app/state/profile/profile.actions';
|
|
import { MatTabChangeEvent } from '@angular/material/tabs';
|
|
|
|
@Component({
|
|
selector: 'app-account',
|
|
templateUrl: './account.component.html',
|
|
styleUrls: ['./account.component.scss'],
|
|
providers: [DialogService],
|
|
})
|
|
export class AccountComponent implements OnInit {
|
|
@Output() setUserDataOrderPage = new EventEmitter<null>();
|
|
@ViewChild('menu', { static: true}) menu!: ElementRef;
|
|
public refSystemId: string = '';
|
|
public selectedTabPage: number = 1
|
|
|
|
constructor(
|
|
private cookiesService: CookiesService,
|
|
private router: Router,
|
|
private route: ActivatedRoute,
|
|
private dialogService: DialogService,
|
|
private jsonRpcService: JsonrpcService,
|
|
private messageService: MessageService,
|
|
private cartService: CartService,
|
|
private store: Store
|
|
) { }
|
|
|
|
public currentPage!: Page;
|
|
public handleHttpErrorFunc = this.handleHttpError.bind(this);
|
|
private ref!: DynamicDialogRef;
|
|
public version: string = environment.version;
|
|
|
|
readonly PageCode = PageCode;
|
|
readonly pageList = environment.hasBonusProgram
|
|
? PageListWithBonus
|
|
: PageList;
|
|
|
|
readonly MainPageCode = MainPageCode;
|
|
readonly mainPageList = PageListMain;
|
|
public currentPageMain: Page = this.mainPageList[environment.production ? 1 : 1];
|
|
public cartCount = 0;
|
|
public showAuthoriztion = false;
|
|
|
|
ngOnInit(): void {
|
|
|
|
this.checkAuthorization(true)
|
|
|
|
this.store.dispatch(getProfile())
|
|
this.store.dispatch(getTransactions())
|
|
this.store.dispatch(getTransactionsInfo())
|
|
|
|
|
|
this.currentPage = this.pageList[0];
|
|
document.body.classList.add(
|
|
'woocommerce-account',
|
|
'woocommerce-page',
|
|
'woocommerce-orders'
|
|
);
|
|
this.route.queryParams.subscribe((params) => {
|
|
if (!params['activeAccountPage']) {
|
|
this.currentPage = this.pageList[0];
|
|
return;
|
|
}
|
|
const currentPage = this.pageList.find((page) => {
|
|
return page.code === Number(params['activeAccountPage']);
|
|
});
|
|
if (!currentPage) {
|
|
this.currentPage = this.pageList[0];
|
|
} else {
|
|
this.currentPage = currentPage;
|
|
}
|
|
});
|
|
this.cartCount = this.cartService.cartCount;
|
|
this.cartService.cartCount$.subscribe({
|
|
next: (count) => {
|
|
this.cartCount = count;
|
|
document.querySelectorAll('.cart')[0].setAttribute("data-counter", this.cartCount.toString())
|
|
}
|
|
});
|
|
}
|
|
|
|
phoneConfirmed(): void {
|
|
this.refSystem();
|
|
this.showAuthoriztion = false
|
|
this.checkAuthorization(true)
|
|
}
|
|
|
|
async refSystem() {
|
|
const additionalInfo = (await lastValueFrom(
|
|
this.jsonRpcService.rpc({
|
|
method: 'getAdditionalInfo',
|
|
params: []
|
|
}, RpcService.authService, true)
|
|
)).data
|
|
this.route.queryParams.subscribe((params) => {
|
|
if (params['refUserId']) {
|
|
if (additionalInfo.refSystem?.code.length) {
|
|
this.messageService.add({
|
|
severity: 'custom',
|
|
summary:
|
|
'Вы уже зарегестрированы в реферальной программе!',
|
|
});
|
|
return;
|
|
}
|
|
this.refSystemId = params['refUserId'];
|
|
this.jsonRpcService
|
|
.rpc(
|
|
{
|
|
method: 'updateAdditionalInfo',
|
|
params: [
|
|
{
|
|
refSystem: {
|
|
code: this.refSystemId,
|
|
},
|
|
},
|
|
],
|
|
},
|
|
RpcService.authService,
|
|
true
|
|
)
|
|
.subscribe({
|
|
next: () => {
|
|
this.router.navigate([], {
|
|
queryParams: {
|
|
refUserId: null,
|
|
},
|
|
queryParamsHandling: 'merge',
|
|
});
|
|
this.messageService.add({
|
|
severity: 'custom',
|
|
summary:
|
|
'Регистрация прошла успешна! Бонусы скоро будут начислены',
|
|
});
|
|
},
|
|
error: (err) => {
|
|
console.error('Error: ', err);
|
|
this.messageService.add({
|
|
severity: 'error',
|
|
summary: 'Произошла ошибка, попробуйте позже',
|
|
});
|
|
},
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
changeMainPage(page: Page, event?: MouseEvent): void {
|
|
if (event) {
|
|
event.preventDefault();
|
|
}
|
|
this.currentPageMain = page;
|
|
this.router.navigate(['.'], {
|
|
relativeTo: this.route,
|
|
// queryParams: {
|
|
// activePage: this.currentPage.code,
|
|
// },
|
|
queryParamsHandling: 'merge',
|
|
});
|
|
this.checkAuthorization(true)
|
|
if (this.currentPageMain === this.mainPageList[2]) {
|
|
this.checkAuthorization(false)
|
|
}
|
|
this.menu.nativeElement.setAttribute('isShow', 'false')
|
|
}
|
|
|
|
changePage(page: Page, event?: MouseEvent): void {
|
|
if (event) {
|
|
event.preventDefault();
|
|
}
|
|
this.currentPage = page;
|
|
this.router.navigate(['.'], {
|
|
relativeTo: this.route,
|
|
queryParams: {
|
|
activeAccountPage: this.currentPage.code,
|
|
},
|
|
queryParamsHandling: 'merge',
|
|
});
|
|
}
|
|
|
|
checkAuthorization(showAuthoriztion: boolean, forced = false) {
|
|
if (!this.getToken() || forced) {
|
|
this.showAuthoriztion = showAuthoriztion
|
|
}
|
|
}
|
|
|
|
handleHttpError(error: HttpErrorResponse): void {
|
|
if (error.status === 500) {
|
|
this.logout();
|
|
}
|
|
}
|
|
|
|
setToken(token: string): void {
|
|
this.cookiesService.setCookie('token', token);
|
|
}
|
|
|
|
getToken(): string | void {
|
|
return this.cookiesService.getItem('token');
|
|
}
|
|
|
|
deleteToken(): void {
|
|
this.cookiesService.deleteCookie('token');
|
|
// this.router.navigate(['.'], {
|
|
// queryParams: {},
|
|
// });
|
|
}
|
|
|
|
onReject() {
|
|
this.messageService.clear('c');
|
|
}
|
|
|
|
onConfirm() {
|
|
this.deleteToken();
|
|
this.showAuthoriztion = true;
|
|
this.messageService.clear('c')
|
|
}
|
|
|
|
changeTabPage(event: MatTabChangeEvent) {
|
|
if (event.index === 2) {
|
|
this.selectedTabPage = 1
|
|
this.logout()
|
|
}
|
|
}
|
|
|
|
logout(event?: MouseEvent) {
|
|
if (event) {
|
|
event.preventDefault()
|
|
}
|
|
this.messageService.add({ key: 'c', sticky: true, severity: 'warn', summary: 'Вы уверены, что хотите выйти?' });
|
|
}
|
|
}
|