Enable user search and filtering in the bans component

Added support for searching and filtering user names using `HistoryService`. Implemented a dropdown for search suggestions with dynamic filtering and selection. Updated UI and styles to accommodate the new input functionality.
This commit is contained in:
Teriuihi 2025-04-12 00:54:58 +02:00
parent 02c69b318a
commit c83f95a3de
3 changed files with 73 additions and 4 deletions

View File

@ -17,7 +17,20 @@
<button class="button-outer" (click)="punishmentType = 'warn'">Warnings</button> <button class="button-outer" (click)="punishmentType = 'warn'">Warnings</button>
</div> </div>
<div class="historySearchContainer"> <div class="historySearchContainer">
<input class="historySearch" type="text" placeholder="Search.."> <input class="historySearch"
type="text"
placeholder="Search.."
[(ngModel)]="searchTerm"
(input)="filterNames()"
>
<div class="search-dropdown" *ngIf="filteredNames.length > 0 && searchTerm">
<div
class="dropdown-item"
*ngFor="let name of filteredNames"
(mousedown)="selectName(name)">
{{ name }}
</div>
</div>
</div> </div>
</div> </div>
<div class="historyTable"> <div class="historyTable">

View File

@ -34,3 +34,26 @@ main .container {
.button-outer { .button-outer {
margin-right: 15px; margin-right: 15px;
} }
.dropdown-results {
position: absolute;
top: 100%;
left: 0;
width: 100%;
max-height: 300px;
overflow-y: auto;
background-color: white;
border: 1px solid #ddd;
border-top: none;
z-index: 1000;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
}
.dropdown-item {
padding: 8px 12px;
cursor: pointer;
}
.dropdown-item:hover {
background-color: #f5f5f5;
}

View File

@ -1,19 +1,52 @@
import {Component} from '@angular/core'; import {Component, OnInit} from '@angular/core';
import {HeaderComponent} from "../header/header.component"; import {HeaderComponent} from "../header/header.component";
import {HistoryComponent} from './history/history.component'; import {HistoryComponent} from './history/history.component';
import {HistoryService} from '../../api';
import {NgForOf, NgIf} from '@angular/common';
import {FormsModule} from '@angular/forms';
@Component({ @Component({
selector: 'app-bans', selector: 'app-bans',
imports: [ imports: [
HeaderComponent, HeaderComponent,
HistoryComponent HistoryComponent,
NgIf,
FormsModule,
NgForOf
], ],
templateUrl: './bans.component.html', templateUrl: './bans.component.html',
styleUrl: './bans.component.scss' styleUrl: './bans.component.scss'
}) })
export class BansComponent { export class BansComponent implements OnInit {
constructor(public historyApi: HistoryService) {
}
public userType: 'player' | 'staff' = "player"; public userType: 'player' | 'staff' = "player";
public punishmentType: 'all' | 'ban' | 'mute' | 'kick' | 'warn' = "all"; public punishmentType: 'all' | 'ban' | 'mute' | 'kick' | 'warn' = "all";
public names: string[] = [];
public searchTerm: string = '';
public filteredNames: string[] = [];
ngOnInit() {
this.historyApi.getUserNames(this.userType, this.punishmentType).subscribe(names => {
this.names = names;
})
}
public filterNames() {
if (!this.searchTerm) {
this.filteredNames = [];
return;
}
this.filteredNames = this.names.filter(name =>
name.toLowerCase().startsWith(this.searchTerm.toLowerCase())
).slice(0, 10);
}
public selectName(name: string) {
this.searchTerm = name;
this.filteredNames = [];
}
} }