unoffical wafrn mirror
wafrn.net
atproto
social-network
activitypub
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}