unoffical wafrn mirror wafrn.net
atproto social-network activitypub
at angular21 108 lines 4.0 kB view raw
1import { DatePipe } from '@angular/common' 2import { Component, viewChild, inject } from '@angular/core' 3import { MatButtonModule } from '@angular/material/button' 4import { MatCardModule } from '@angular/material/card' 5import { MatFormFieldModule } from '@angular/material/form-field' 6import { MatInputModule } from '@angular/material/input' 7import { MatPaginator, MatPaginatorModule } from '@angular/material/paginator' 8import { MatSort, MatSortModule } from '@angular/material/sort' 9import { MatTableDataSource, MatTableModule } from '@angular/material/table' 10import { RouterModule } from '@angular/router' 11import { TranslatePipe } from '@ngx-translate/core' 12import { AvatarSmallComponent } from 'src/app/components/avatar-small/avatar-small.component' 13import { AdminService, AdminUserBlocks, ServerBlock, AdminUserBlock } from 'src/app/services/admin.service' 14import { SimpleTitleService } from 'src/app/services/simple-title.service' 15 16@Component({ 17 selector: 'app-blocks', 18 imports: [ 19 RouterModule, 20 MatFormFieldModule, 21 MatInputModule, 22 MatCardModule, 23 MatButtonModule, 24 MatTableModule, 25 MatSortModule, 26 MatPaginatorModule, 27 AvatarSmallComponent, 28 TranslatePipe, 29 DatePipe 30 ], 31 templateUrl: './blocks.component.html', 32 styleUrls: ['./blocks.component.scss'] 33}) 34export class BlocksComponent { 35 private adminService = inject(AdminService); 36 37 showUserBlocks = false 38 userBlocks = new MatTableDataSource<AdminUserBlock, MatPaginator>(undefined) 39 userBlocksPaginator = viewChild.required<MatPaginator>('userBlocksPaginator') 40 userBlocksSort = viewChild.required<MatSort>('userBlocksSort') 41 userBlocksColumns = ['blocker', 'blocked', 'reason', 'createdAt'] 42 43 showUserServerBlocks = false 44 userServerBlocks = new MatTableDataSource<ServerBlock, MatPaginator>(undefined) 45 userServerBlocksPaginator = viewChild.required<MatPaginator>('userServerBlocksPaginator') 46 userServerBlocksSort = viewChild.required<MatSort>('userServerBlocksSort') 47 userServerBlocksColumns = ['userBlocker', 'blockedServer', 'createdAt'] 48 49 constructor() { 50 const simpleTitle = inject(SimpleTitleService); 51 52 simpleTitle.set('menu.admin.blocklist') 53 } 54 55 async ngOnInit() { 56 const res: AdminUserBlocks = await this.adminService.getBlocks() 57 58 this.userBlocks.data = res.userBlocks 59 this.userBlocks.filterPredicate = (block, filter) => 60 block.blocker.url.startsWith(filter) || block.blocked.url.startsWith(filter) 61 this.userBlocks.sort = this.userBlocksSort() 62 this.userBlocks.sortingDataAccessor = (block, header) => { 63 switch (header) { 64 case 'blocker': 65 return block.blocker.url 66 case 'blocked': 67 return block.blocked.url 68 case 'createdAt': 69 return block.createdAt 70 default: 71 return '' 72 } 73 } 74 this.userBlocks.paginator = this.userBlocksPaginator() 75 76 this.userServerBlocks.data = res.userServerBlocks 77 this.userServerBlocks.paginator = this.userServerBlocksPaginator() 78 this.userServerBlocks.filterPredicate = (block, filter) => 79 block.userBlocker.url.startsWith(filter) || block.blockedServer.displayName.startsWith(filter) 80 this.userServerBlocks.sort = this.userServerBlocksSort() 81 this.userServerBlocks.sortingDataAccessor = (block, header) => { 82 switch (header) { 83 case 'userBlocker': 84 return block.userBlocker.url 85 case 'blockedServer': 86 return block.blockedServer.displayName 87 case 'createdAt': 88 return block.createdAt 89 default: 90 return '' 91 } 92 } 93 } 94 95 onUserBlockChange(event: Event) { 96 const target = event.target 97 if (target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement) { 98 this.userBlocks.filter = target.value 99 } 100 } 101 102 onUserServerBlockChange(event: Event) { 103 const target = event.target 104 if (target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement) { 105 this.userServerBlocks.filter = target.value 106 } 107 } 108}