Browse Source

bruh

master
gsd 2 months ago
parent
commit
cfa159035d
  1. 3
      angular.json
  2. 134
      src/app/admin-pages/files-page/FilesSearchTable.ts
  3. 145
      src/app/admin-pages/files-page/FilesUploader.ts
  4. 2
      src/app/app.module.ts
  5. 13
      src/app/pages/banlist-page/banlist-page.component.html
  6. 15
      src/app/pages/banlist-page/banlist-page.component.ts
  7. 19
      src/app/pages/banlist-page/banlist-search-table.ts
  8. 23
      src/app/pages/internal-components/DonateSearchTable.ts
  9. 3
      src/app/pages/internal-components/abstract-search-table.component.ts
  10. 15
      src/app/pages/internal-components/dialogs/AuthDialogRequest.ts
  11. 26
      src/app/pages/killfeed-page/KillFeedSearchTable.ts
  12. 3
      src/app/pages/killfeed-page/killfeed-page.component.ts
  13. 23
      src/app/pages/messages-page/message-search-table.ts
  14. 3
      src/app/pages/messages-page/messages-page.component.ts
  15. 25
      src/app/pages/reports-page/ReportSearchTable.ts
  16. 3
      src/app/pages/reports-page/reports-page.component.ts
  17. 3
      src/app/pages/vip-page/vip-page.component.html
  18. 3
      src/app/services/ban.service.ts
  19. 7
      src/app/services/file.service.ts
  20. 3
      src/app/services/message.service.ts
  21. 3
      src/app/services/vip.service.ts
  22. 4
      src/app/utils/DefaultValues.ts

3
angular.json

@ -107,5 +107,8 @@
}
}
}
},
"cli": {
"analytics": false
}
}

134
src/app/admin-pages/files-page/FilesSearchTable.ts

@ -1,10 +1,142 @@
import {Component} from "@angular/core";
import {AbstractSearchTable} from "../../pages/internal-components/abstract-search-table.component";
import {DbFile} from "../../entities/DbFile";
import {SearchFilter} from "../../entities/search/SearchFilter";
import {AuthService} from "../../services/auth.service";
import {ServerService} from "../../services/server.service";
import {PlayerService} from "../../services/player.service";
import {ActivatedRoute, Router} from "@angular/router";
import {VipService} from "../../services/vip.service";
import {FileService} from "../../services/file.service";
import {MatTableDataSource} from "@angular/material/table";
import {ActionService} from "../../services/action.service";
@Component({
selector: 'app-files-search-table',
template: `
<div style="padding-bottom: 10px;">
<mat-chip-list>
<mat-chip [matMenuTriggerFor]="addFilter">Искать по...</mat-chip>
<mat-menu #addFilter>
<button mat-menu-item (click)="filter.addAccountToSearch('')" [disabled]="account_id!=null">Профилю</button>
<button mat-menu-item [matMenuTriggerFor]="timeSelect">Времени</button>
</mat-menu>
<mat-menu #timeSelect>
<button mat-menu-item (click)="filter.addEndTimeToSearch()">До ...</button>
<button mat-menu-item (click)="filter.addBeginTimeToSearch()">После ...</button>
</mat-menu>
<mat-chip *ngIf="filter.updated" (click)="updateData()">Обновить</mat-chip>
<app-filter-mat-chip-account
[filter]="filter"
[hidden]="account_id!=null"
></app-filter-mat-chip-account>
<app-filter-mat-chip-date-begin
[filter]="filter">
</app-filter-mat-chip-date-begin>
<app-filter-mat-chip-date-end
[filter]="filter">
</app-filter-mat-chip-date-end>
</mat-chip-list>
</div>
<div>
<div class="loading-shade"
*ngIf="loading || err">
<mat-spinner *ngIf="loading"></mat-spinner>
<div class="err" *ngIf="err">
Слишком много запросов или сервер не отвечает, обнови страницу.
<br>
<button mat-button (click)="err=false; loading=false">Закрыть</button>
</div>
</div>
<table mat-table [dataSource]="dataSource" style="width: 100%">
<ng-container matColumnDef="uploader">
<th mat-header-cell *matHeaderCellDef> Имя игрока </th>
<td mat-cell *matCellDef="let row" [matMenuTriggerFor]="accountMenu"> {{row.uploader}}
<mat-menu #accountMenu>
<button mat-menu-item (click)="filter.addAccountToSearch('[U:1:'+row.uploader+']')">Добавить в поиск используя ID</button>
<button mat-menu-item (click)="authService.searchPlayer(row.uploader)">Открыть профиль</button>
</mat-menu></td>
</ng-container>
<ng-container matColumnDef="timestamp">
<th mat-header-cell *matHeaderCellDef> Время </th>
<td mat-cell *matCellDef="let row" [matMenuTriggerFor]="dateMenu"> {{row.timestamp | date:"HH:mm dd/MM/yyyy"}}
<mat-menu #dateMenu>
<button mat-menu-item (click)="filter.addEndTimeToSearch(row.timestamp)">Искать до {{row.timestamp | date:"HH:mm:ss dd/MM/yyyy"}}</button>
<button mat-menu-item (click)="filter.addBeginTimeToSearch(row.timestamp)">Искать после {{row.timestamp | date:"HH:mm:ss dd/MM/yyyy"}}</button>
</mat-menu></td>
</ng-container>
<ng-container matColumnDef="filename">
<th mat-header-cell *matHeaderCellDef>Файл</th>
<td mat-cell *matCellDef="let row"> {{row.filename}}</td>
</ng-container>
<ng-container matColumnDef="extension">
<th mat-header-cell *matHeaderCellDef>Расширение</th>
<td mat-cell *matCellDef="let row"> {{row.extension}}</td>
</ng-container>
<ng-container matColumnDef="filesize">
<th mat-header-cell *matHeaderCellDef>Размер</th>
<td mat-cell *matCellDef="let row"> {{row.filesize}}</td>
</ng-container>
<ng-container matColumnDef="tags">
<th mat-header-cell *matHeaderCellDef>Теги</th>
<td mat-cell *matCellDef="let row"> {{row.tags}}</td>
</ng-container>
<ng-container matColumnDef="actions">
<th mat-header-cell *matHeaderCellDef>Действия</th>
<td mat-cell *matCellDef="let row">
<mat-icon style="cursor: pointer" (click)="actionService.goToUrlViaTab('api/file/'+row.id)">cloud_download</mat-icon>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
<!-- Row shown when there is no matching data. -->
<div *ngIf="!loading">
<tr class="mat-row" *matNoDataRow>
<td class="mat-cell" colspan="4">А вот и нету файлов...</td>
</tr>
</div>
</table>
<mat-paginator
[pageSizeOptions]="pageSizeOptions"
[pageSize]="pageSize"
(page)="updateData()"
></mat-paginator>
</div>
`
})
export class FilesSearchTable {
export class FilesSearchTable extends AbstractSearchTable<DbFile, SearchFilter>{
displayedColumns: string[] = ['uploader', 'timestamp','filename', 'extension','filesize', 'tags', 'actions'];
constructor(authService: AuthService,
serverService: ServerService,
playerService: PlayerService,
router: Router,
route: ActivatedRoute,
private fileService: FileService,
public actionService: ActionService) {
super(authService, serverService, playerService, route, router);
super.filter = new SearchFilter();
}
private getFiles(): boolean {
this.filter.updated = false;
this.loading = true;
this.fileService.getFiles(this.filter, this.paginator).subscribe(
(res) => {
this.dataSource = new MatTableDataSource<DbFile>(res.data);
this.err = false;
}, (e) => this.err = true, () => this.loading = false
)
return true;
}
override updateData() {
if (this.lazy) return;
super.updateData();
this.getFiles();
}
}

145
src/app/admin-pages/files-page/FilesUploader.ts

@ -1,10 +1,151 @@
import {Component} from "@angular/core";
import {Component, Input, OnInit} from "@angular/core";
import {FilesSearchTable} from "./FilesSearchTable";
import {FileService} from "../../services/file.service";
import {MatTableDataSource} from "@angular/material/table";
export interface UploadedFile {
file:File;
status: "initial" | "uploading" | "success" | "fail";
tags: string[];
tag:'';
}
@Component({
selector: 'app-files-uploader',
template: `
<input style="display: none" type="file" class="file-input" (change)="onChange($event)" #fileUpload multiple />
<div>
<button mat-button mat-raised-button (click)="fileUpload.click()" [disabled]="status!='wait'">Выбрать файлы</button>
<button mat-button mat-raised-button (click)="processingFiles()" [disabled]="status!='wait'||dataSource.data.length==0">Загрузить файлы</button>
<mat-form-field appearance="fill">
<mat-label>Общий тег</mat-label>
<input matInput
[(ngModel)]="globalTag"
(change)="setGlobalTag()">
</mat-form-field>
</div>
<table mat-table [dataSource]="dataSource" style="width: 100%">
<!-- Position Column -->
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef> Имя файла </th>
<td mat-cell *matCellDef="let element"> {{element.file.name}} </td>
</ng-container>
<!-- Name Column -->
<ng-container matColumnDef="size">
<th mat-header-cell *matHeaderCellDef> Размер </th>
<td mat-cell *matCellDef="let element"> {{element.file.size}} </td>
</ng-container>
<!-- Weight Column -->
<ng-container matColumnDef="status">
<th mat-header-cell *matHeaderCellDef> Статус загрузки </th>
<td mat-cell *matCellDef="let element"> {{status2rus(element.status)}} </td>
</ng-container>
<!-- Symbol Column -->
<ng-container matColumnDef="tags">
<th mat-header-cell *matHeaderCellDef> Теги </th>
<td mat-cell *matCellDef="let element">
<mat-chip-list>
<mat-chip [matMenuTriggerFor]="appendTag">+</mat-chip>
<mat-chip *ngFor="let tag of element.tags" (removed)="removeTag(element, tag)">{{tag}}
<button matChipRemove>
<mat-icon>cancel</mat-icon>
</button>
</mat-chip>
<mat-menu #appendTag>
<mat-form-field appearance="fill"
(click)="$event.stopPropagation()">
<mat-label>Новый тег</mat-label>
<input matInput
[(ngModel)]="element.tag"
(change)="element.tags.push(element.tag)">
</mat-form-field>
</mat-menu>
</mat-chip-list>
</td>
</ng-container>
<!-- Symbol Column -->
<ng-container matColumnDef="action">
<th mat-header-cell *matHeaderCellDef> Действия </th>
<td mat-cell *matCellDef="let element"> nyk </td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
<tr class="mat-row" *matNoDataRow>
<td class="mat-cell" colspan="4">Нет выбранных файлов</td>
</tr>
</table>
`
})
export class FilesUploader {
export class FilesUploader implements OnInit {
displayedColumns: string[] = ['name', 'size', 'tags', 'status', 'action'];
dataSource!:MatTableDataSource<UploadedFile>;
@Input('fst')
fst!: FilesSearchTable;
status: 'wait' | 'uploading' | 'done' = 'wait';
globalTag: string = '';
constructor(private fileService:FileService) {
}
ngOnInit(): void {
this.dataSource = new MatTableDataSource<UploadedFile>();
}
status2rus(status: "initial" | "uploading" | "success" | "fail"):string {
switch (status) {
case "initial": return 'Ожидание';
case "uploading": return 'Загрузка';
case "success": return 'Успешно';
case "fail": return 'Ошибка';
default: return '';
}
}
onChange(event: any) {
if (event && event.target && event.target.files) {
for (const f of event.target.files) {
this.dataSource.data.push({file:f, status: "initial", tags: [], tag:''});
}
}
this.dataSource = new MatTableDataSource<UploadedFile>(this.dataSource.data);
}
processingFiles() {
this.status = "uploading";
this.dataSource.data.forEach((f)=> {
if (f.status == "initial") {
f.status = "uploading";
this.fileService.uploadFile(f.file, f.tags).subscribe(
(res) => {
f.status = "success"
},
(err) => {
f.status = "fail";
}
)
}
});
this.status = "wait";
}
removeTag(f: UploadedFile, tag: string) {
f.tags = f.tags.filter(t => t != tag);
}
setGlobalTag() {
if (this.globalTag.length == 0 ) return;
this.dataSource.data.forEach((f)=> {
this.removeTag(f, this.globalTag);
f.tags.push(this.globalTag);
});
}
}

2
src/app/app.module.ts

@ -79,6 +79,7 @@ import { AdminMainPageComponent } from './admin-pages/admin-main-page/admin-main
import { FilesPageComponent } from './admin-pages/files-page/files-page.component';
import {FilesSearchTable} from "./admin-pages/files-page/FilesSearchTable";
import {FilesUploader} from "./admin-pages/files-page/FilesUploader";
import {AuthDialogRequest} from "./pages/internal-components/dialogs/AuthDialogRequest";
registerLocaleData(localeRu, "ru")
@ -120,6 +121,7 @@ registerLocaleData(localeRu, "ru")
VipBuyDialog,
VipFreeDialog,
VipPromocodeDialog,
AuthDialogRequest,
DowngamePageComponent,
StatisticPageComponent,
AboutPageComponent,

13
src/app/pages/banlist-page/banlist-page.component.html

@ -1,13 +0,0 @@
<div class="content-in-center-header" style="flex-direction: column;">
<h1>Бан лист</h1>
<h3>Скоро и ты сюда попадешь браток</h3>
</div>
<div class="content-in-center">
<div class="content-in-border">
<app-need-auth-to-continue *ngIf="!authService.isAuth()"></app-need-auth-to-continue>
<div *ngIf="authService.isAuth()">
<app-banlist-search-table></app-banlist-search-table>
</div>
</div>
</div>

15
src/app/pages/banlist-page/banlist-page.component.ts

@ -13,8 +13,19 @@ import {BanViewDialog} from "../internal-components/dialogs/BanViewDialog";
@Component({
selector: 'app-banlist-page',
templateUrl: './banlist-page.component.html',
styleUrls: ['./banlist-page.component.scss']
styleUrls: ['./banlist-page.component.scss'],
template: `
<div class="content-in-center-header" style="flex-direction: column;">
<h1>Бан лист</h1>
<h3>Скоро и ты сюда попадешь браток</h3>
</div>
<div class="content-in-center">
<div class="content-in-border">
<app-banlist-search-table></app-banlist-search-table>
</div>
</div>
`
})
export class BanlistPageComponent {

19
src/app/pages/banlist-page/banlist-search-table.ts

@ -10,6 +10,7 @@ import {BanService} from "../../services/ban.service";
import {MatDialog} from "@angular/material/dialog";
import {MatTableDataSource} from "@angular/material/table";
import {BanViewDialog} from "../internal-components/dialogs/BanViewDialog";
import {AuthDialogRequest} from "../internal-components/dialogs/AuthDialogRequest";
@Component({
selector: "app-banlist-search-table",
@ -119,8 +120,8 @@ import {BanViewDialog} from "../internal-components/dialogs/BanViewDialog";
</table>
<mat-paginator
[pageSizeOptions]="[5, 10, 25, 100]"
[pageSize]="10"
[pageSizeOptions]="pageSizeOptions"
[pageSize]="pageSize"
(page)="updateData()"
></mat-paginator>
</div>
@ -146,7 +147,19 @@ export class BanlistSearchTable extends AbstractSearchTable<Ban, BanSearchFilter
(res) => {
this.dataSource = new MatTableDataSource<Ban>(res.data);
this.err = false;
}, (e) => this.err = true, () => this.loading = false
}, (e) => {
this.loading = false;
switch (e.status) {
case 401: {
this.dialog.open(AuthDialogRequest);
break;
}
default: {
this.err = true;
break;
}
}
}, () => this.loading = false
)
return true;
}

23
src/app/pages/internal-components/DonateSearchTable.ts

@ -8,6 +8,8 @@ import {PlayerService} from "../../services/player.service";
import {ActivatedRoute, Router} from "@angular/router";
import {VipService} from "../../services/vip.service";
import {MatTableDataSource} from "@angular/material/table";
import {MatDialog} from "@angular/material/dialog";
import {AuthDialogRequest} from "./dialogs/AuthDialogRequest";
@Component({
selector: 'app-donate-search-table',
@ -86,8 +88,8 @@ import {MatTableDataSource} from "@angular/material/table";
</table>
<mat-paginator
[pageSizeOptions]="[5, 10, 25, 100]"
[pageSize]="10"
[pageSizeOptions]="pageSizeOptions"
[pageSize]="pageSize"
(page)="updateData()"
></mat-paginator>
</div>
@ -101,7 +103,8 @@ export class DonateSearchTable extends AbstractSearchTable<DonateStat, SearchFil
playerService: PlayerService,
router: Router,
route: ActivatedRoute,
private vipService: VipService) {
private vipService: VipService,
private dialog: MatDialog) {
super(authService, serverService, playerService, route, router);
super.filter = new SearchFilter();
}
@ -113,7 +116,19 @@ export class DonateSearchTable extends AbstractSearchTable<DonateStat, SearchFil
(res) => {
this.dataSource = new MatTableDataSource<DonateStat>(res.data)
this.err = false;
}, (e) => this.err = true, () => this.loading = false
}, (e) => {
this.loading = false;
switch (e.status) {
case 401: {
this.dialog.open(AuthDialogRequest);
break;
}
default: {
this.err = true;
break;
}
}
}, () => this.loading = false
)
return true;
}

3
src/app/pages/internal-components/abstract-search-table.component.ts

@ -9,9 +9,12 @@ import {ServerService} from "../../services/server.service";
import {ActivatedRoute, Router} from "@angular/router";
import {AuthService} from "../../services/auth.service";
import {PlayerService} from "../../services/player.service";
import {DefaultValues} from "../../utils/DefaultValues";
@Component({template: ''})
export abstract class AbstractSearchTable<T,U extends SearchFilter> implements AfterViewInit {
pageSizeOptions:number[] = DefaultValues.pageSizeOptions;
pageSize:number = DefaultValues.pageSize;
dataSource: MatTableDataSource<T>;
filter: U;

15
src/app/pages/internal-components/dialogs/AuthDialogRequest.ts

@ -0,0 +1,15 @@
import {Component} from "@angular/core";
@Component({
selector: 'app-auth-dialog-request',
template: `
<h1 mat-dialog-title style="color: black">Чтобы смотреть дальше...</h1>
<mat-dialog-content>
<app-need-auth-to-continue></app-need-auth-to-continue>
</mat-dialog-content>
<mat-dialog-actions>
<button mat-button mat-raised-button mat-dialog-close="true" style="width: 100%">Закрыть</button>
</mat-dialog-actions>
`
})
export class AuthDialogRequest {}

26
src/app/pages/killfeed-page/KillFeedSearchTable.ts

@ -12,6 +12,9 @@ import {KillFeedSearchFilter} from "../../entities/search/KillFeedSearchFilter";
import {KillFeed} from "../../entities/KillFeed";
import {MatTableDataSource} from "@angular/material/table";
import {Component} from "@angular/core";
import {DefaultValues} from "../../utils/DefaultValues";
import {MatDialog} from "@angular/material/dialog";
import {AuthDialogRequest} from "../internal-components/dialogs/AuthDialogRequest";
@Component({
selector: 'app-killfeed-search-table',
@ -115,8 +118,8 @@ import {Component} from "@angular/core";
</table>
<mat-paginator
[pageSizeOptions]="[5, 10, 25, 100]"
[pageSize]="10"
[pageSizeOptions]="pageSizeOptions"
[pageSize]="pageSize"
(page)="updateData()"
></mat-paginator>
</div>
@ -130,7 +133,8 @@ export class KillFeedSearchTable extends AbstractSearchTable<KillFeedSearchTable
playerService: PlayerService,
router: Router,
route: ActivatedRoute,
private http: HttpClient) {
private http: HttpClient,
private dialog: MatDialog) {
super(authService, serverService, playerService, route, router);
super.filter = new KillFeedSearchFilter();
}
@ -140,14 +144,26 @@ export class KillFeedSearchTable extends AbstractSearchTable<KillFeedSearchTable
this.loading = true;
this.http.post(`api/profile/killfeed`, this.filter,
{params:
{size: this.paginator?this.paginator.pageSize:20,
{size: this.paginator?this.paginator.pageSize:DefaultValues.pageSize,
page: this.paginator?this.paginator.pageIndex:0,
mode: this.filter.mode }
}).pipe((map((res) => PagingAndSortingPaginator<KillFeed>.newObj().fromData(res).updatePaginator(this.paginator))))
.subscribe((res) => {
this.dataSource = new MatTableDataSource<KillFeedSearchTable>(res.data);
this.err = false;
}, (e) => this.err = true, () => this.loading = false
}, (e) => {
this.loading = false;
switch (e.status) {
case 401: {
this.dialog.open(AuthDialogRequest);
break;
}
default: {
this.err = true;
break;
}
}
}, () => this.loading = false
)
}

3
src/app/pages/killfeed-page/killfeed-page.component.ts

@ -12,8 +12,7 @@ import {AuthService} from "../../services/auth.service";
<div class="content-in-center">
<div class="content-in-border">
<app-need-auth-to-continue *ngIf="!authService.isAuth()"></app-need-auth-to-continue>
<app-killfeed-search-table *ngIf="authService.isAuth()"></app-killfeed-search-table>
<app-killfeed-search-table></app-killfeed-search-table>
</div>
</div>
`

23
src/app/pages/messages-page/message-search-table.ts

@ -8,6 +8,8 @@ import {ServerService} from "../../services/server.service";
import {PlayerService} from "../../services/player.service";
import {ActivatedRoute, Router} from "@angular/router";
import {MatTableDataSource} from "@angular/material/table";
import {MatDialog} from "@angular/material/dialog";
import {AuthDialogRequest} from "../internal-components/dialogs/AuthDialogRequest";
@Component({
selector: 'app-message-search',
@ -108,8 +110,8 @@ import {MatTableDataSource} from "@angular/material/table";
</table>
<mat-paginator
[pageSizeOptions]="[5, 10, 25, 100]"
[pageSize]="10"
[pageSizeOptions]="pageSizeOptions"
[pageSize]="pageSize"
(page)="updateData()"
></mat-paginator>
</div>
@ -123,7 +125,8 @@ export class MessageSearchTable extends AbstractSearchTable<Message, MessageSear
protected override serverService: ServerService,
protected override playerService: PlayerService,
protected override router: Router,
protected override route: ActivatedRoute) {
protected override route: ActivatedRoute,
private dialog: MatDialog) {
super(authService, serverService, playerService, route, router);
super.filter = new MessageSearchFilter();
}
@ -135,7 +138,19 @@ export class MessageSearchTable extends AbstractSearchTable<Message, MessageSear
(res) => {
this.dataSource = new MatTableDataSource<Message>(res.data);
this.err = false;
}, (e) => this.err = true, () => this.loading = false
}, (e) => {
this.loading = false;
switch (e.status) {
case 401: {
this.dialog.open(AuthDialogRequest);
break;
}
default: {
this.err = true;
break;
}
}
}, () => this.loading = false
)
return true;
}

3
src/app/pages/messages-page/messages-page.component.ts

@ -23,8 +23,7 @@ import {ActivatedRoute, Router} from "@angular/router";
<div class="content-in-center">
<div class="content-in-border">
<app-need-auth-to-continue *ngIf="!authService.isAuth()"></app-need-auth-to-continue>
<div *ngIf="authService.isAuth()">
<div>
<app-message-search></app-message-search>
</div>
</div>

25
src/app/pages/reports-page/ReportSearchTable.ts

@ -11,6 +11,9 @@ import {PagingAndSortingPaginator} from "../../entities/PagingAndSortingPaginato
import {MatTableDataSource} from "@angular/material/table";
import {Component} from "@angular/core";
import {Report} from "../../entities/Report";
import {DefaultValues} from "../../utils/DefaultValues";
import {MatDialog} from "@angular/material/dialog";
import {AuthDialogRequest} from "../internal-components/dialogs/AuthDialogRequest";
@Component({
selector: 'app-report-search-table',
@ -116,8 +119,8 @@ import {Report} from "../../entities/Report";
</table>
<mat-paginator
[pageSizeOptions]="[5, 10, 25, 100]"
[pageSize]="10"
[pageSizeOptions]="pageSizeOptions"
[pageSize]="pageSize"
(page)="updateData()"
></mat-paginator>
</div>
@ -134,7 +137,8 @@ export class ReportSearchTable extends AbstractSearchTable<ReportSearchTable, an
playerService: PlayerService,
router: Router,
route: ActivatedRoute,
private http: HttpClient) {
private http: HttpClient,
private dialog: MatDialog) {
super(authService, serverService, playerService, route, router);
super.filter = new SearchFilter();//todo replace
}
@ -143,13 +147,24 @@ export class ReportSearchTable extends AbstractSearchTable<ReportSearchTable, an
this.filter.updated = false;
this.loading = true;
this.http.post(`api/web/reports`, this.filter, {params:
{size: this.paginator?this.paginator.pageSize:20,
{size: this.paginator?this.paginator.pageSize:DefaultValues.pageSize,
page: this.paginator?this.paginator.pageIndex:0}
}).pipe(map((res) => PagingAndSortingPaginator<Report>.newObj().fromData(res).updatePaginator(this.paginator)))
.subscribe((res) => {
this.dataSource = new MatTableDataSource<ReportSearchTable>(res.data);
this.err = false;
}, (e) => this.err = true, () => this.loading = false
}, (e) => {
this.loading = false;
switch (e.status) {
case 401: {
this.dialog.open(AuthDialogRequest);
break;
}
default: {
this.err = true;
break;
}
}}, () => this.loading = false
);
}

3
src/app/pages/reports-page/reports-page.component.ts

@ -12,8 +12,7 @@ import {AuthService} from "../../services/auth.service";
<div class="content-in-center">
<div class="content-in-border">
<app-need-auth-to-continue *ngIf="!authService.isAuth()"></app-need-auth-to-continue>
<app-report-search-table *ngIf="authService.isAuth()"></app-report-search-table>
<app-report-search-table ></app-report-search-table>
</div>
</div>
`

3
src/app/pages/vip-page/vip-page.component.html

@ -66,8 +66,7 @@
<div class="content-in-border">
<h2 style="color: black">Последние выданые випки</h2>
<div>
<app-need-auth-to-continue *ngIf="!authService.isAuth()"></app-need-auth-to-continue>
<app-donate-search-table *ngIf="authService.isAuth()"></app-donate-search-table>
<app-donate-search-table></app-donate-search-table>
</div>
</div>
</div>

3
src/app/services/ban.service.ts

@ -6,6 +6,7 @@ import {map, Observable} from "rxjs";
import {BanSearchFilter} from "../entities/search/BanSearchFilter";
import {MatPaginator} from "@angular/material/paginator";
import {PagingAndSortingPaginator} from "../entities/PagingAndSortingPaginator";
import {DefaultValues} from "../utils/DefaultValues";
@Injectable({
providedIn: 'root'
@ -17,7 +18,7 @@ export class BanService {
getBanList(filters: BanSearchFilter, paginator: MatPaginator | undefined) {
return this.http.post(`api/web/banlist`,
filters,
{params: {size: paginator?paginator.pageSize:20, page: paginator?paginator.pageIndex:0}}).pipe(
{params: {size: paginator?paginator.pageSize:DefaultValues.pageSize, page: paginator?paginator.pageIndex:0}}).pipe(
map((res) => PagingAndSortingPaginator<Ban>.newObj().fromData(res).updatePaginator(paginator))
);
}

7
src/app/services/file.service.ts

@ -5,6 +5,7 @@ import {MatPaginator} from "@angular/material/paginator";
import {map, Observable} from "rxjs";
import {PagingAndSortingPaginator} from "../entities/PagingAndSortingPaginator";
import {DbFile} from "../entities/DbFile";
import {DefaultValues} from "../utils/DefaultValues";
@Injectable({
providedIn: 'root'
@ -15,7 +16,7 @@ export class FileService {
getFiles(filters: SearchFilter, paginator: MatPaginator | undefined) {
return this.http.post(`api/file/search`, filters,
{params: {size: paginator?paginator.pageSize:20, page: paginator?paginator.pageIndex:0}}).pipe(
{params: {size: paginator?paginator.pageSize:DefaultValues.pageSize, page: paginator?paginator.pageIndex:0}}).pipe(
map((res) => PagingAndSortingPaginator<DbFile>.newObj().fromData(res).updatePaginator(paginator))
);
}
@ -30,10 +31,10 @@ export class FileService {
return this.http.post(`api/file/edit`, file);
}
uploadFile(file: File): Observable<string> {
uploadFile(file: File, tags:string[] = []): Observable<string> {
const formData = new FormData();
formData.append('file', file, file.name);
return this.http.post(`api/file`, formData).pipe(
return this.http.post(`api/file?tags=`+tags.join(","), formData, {responseType: "text"}).pipe(
map((res) => `${res}`)
)
}

3
src/app/services/message.service.ts

@ -5,6 +5,7 @@ import {map} from "rxjs";
import {PagingAndSortingPaginator} from "../entities/PagingAndSortingPaginator";
import {Message} from "../entities/profile/Message";
import {MessageSearchFilter} from "../entities/search/MessageSearchFilter";
import {DefaultValues} from "../utils/DefaultValues";
@Injectable({
providedIn: 'root'
@ -17,7 +18,7 @@ export class MessageService {
return this.http.post(
`/api/profile/messages/pages`,
filters,
{params: {size: paginator?paginator.pageSize:20, page: paginator?paginator.pageIndex:0}}).pipe(
{params: {size: paginator?paginator.pageSize:DefaultValues.pageSize, page: paginator?paginator.pageIndex:0}}).pipe(
map((res) => PagingAndSortingPaginator<Message>.newObj().fromData(res).updatePaginator(paginator))
);
}

3
src/app/services/vip.service.ts

@ -7,6 +7,7 @@ import {MatPaginator} from "@angular/material/paginator";
import {PagingAndSortingPaginator} from "../entities/PagingAndSortingPaginator";
import {Ban} from "../entities/ban/Ban";
import {DonateStat} from "../entities/DonateStat";
import {DefaultValues} from "../utils/DefaultValues";
@Injectable({
providedIn: 'root'
@ -25,7 +26,7 @@ export class VipService {
getDonateStat(filters: SearchFilter, paginator: MatPaginator | undefined) {
return this.http.post(`api/profile/donate`, filters,
{params: {size: paginator?paginator.pageSize:20, page: paginator?paginator.pageIndex:0}}).pipe(
{params: {size: paginator?paginator.pageSize:DefaultValues.pageSize, page: paginator?paginator.pageIndex:0}}).pipe(
map((res) => PagingAndSortingPaginator<DonateStat>.newObj().fromData(res).updatePaginator(paginator))
);
}

4
src/app/utils/DefaultValues.ts

@ -0,0 +1,4 @@
export class DefaultValues {
public static pageSizeOptions:number[] = [5, 10, 25];
public static pageSize:number = 10;
}
Loading…
Cancel
Save