Fixed <select> behaving differently in chrome

This commit is contained in:
nise.moe 2024-02-27 12:23:28 +01:00
parent c39dceb741
commit 3da9b6ac27
4 changed files with 33 additions and 8 deletions

View File

@ -32,16 +32,15 @@
<fieldset class="mt-2" *ngIf="this.sortingOrder"> <fieldset class="mt-2" *ngIf="this.sortingOrder">
<legend>sorting</legend> <legend>sorting</legend>
<select> <select (change)="onSortingFieldChange($event)">
<ng-container *ngFor="let category of ['user', 'beatmap', 'score', 'metrics']"> <ng-container *ngFor="let category of ['user', 'beatmap', 'score', 'metrics']">
<optgroup label="{{ category }}"> <optgroup label="{{ category }}">
<ng-container *ngFor="let field of fields"> <ng-container *ngFor="let field of fields">
<ng-container *ngIf="field.category === category"> <ng-container *ngIf="field.category === category">
<option <option
[value]="field.name" [value]="field.name"
(click)="this.sortingOrder.field = field.name" [selected]="field.name === sortingOrder.field">
[selected]="field.name == this.sortingOrder.field" {{ field.name }}
>{{ field.name }}
</option> </option>
</ng-container> </ng-container>
</ng-container> </ng-container>

View File

@ -185,6 +185,22 @@ export class SearchComponent implements OnInit {
}, {}); }, {});
} }
onSortingFieldChange(event: Event): void {
const selectElement = event.target as HTMLSelectElement;
if(!selectElement) {
return;
}
if(this.sortingOrder === null) {
this.sortingOrder = {
field: 'user_id',
order: 'ASC'
};
}
this.sortingOrder.field = selectElement.value;
}
saveSettingsToLocalStorage(): void { saveSettingsToLocalStorage(): void {
const settings = this.serializeSettings(); const settings = this.serializeSettings();
localStorage.setItem('search_settings', JSON.stringify(settings)); localStorage.setItem('search_settings', JSON.stringify(settings));

View File

@ -35,14 +35,14 @@
</ng-container> </ng-container>
</select> </select>
<select [disabled]="!predicate.field"> <select [disabled]="!predicate.field" (change)="onOperatorChange(predicate, $event)">
<option *ngFor="let operator of predicate.field?.validOperators" <option *ngFor="let operator of predicate.field?.validOperators" [value]="operator.operatorType"
[selected]="operator.operatorType === predicate.operator?.operatorType" [selected]="operator.operatorType === predicate.operator?.operatorType">
(click)="predicate.operator = operator; this.queryChanged.emit()">
{{ operator.operatorType }} {{ operator.operatorType }}
</option> </option>
</select> </select>
<ng-container *ngIf="predicate.operator"> <ng-container *ngIf="predicate.operator">
<ng-container *ngIf="predicate.operator.acceptsValues == 'any'"> <ng-container *ngIf="predicate.operator.acceptsValues == 'any'">

View File

@ -43,6 +43,16 @@ export class QueryComponent {
predicate.operator = selectedField.validOperators[0]; predicate.operator = selectedField.validOperators[0];
} }
onOperatorChange(predicate: Predicate, event: Event): void {
const selectElement = event.target as HTMLSelectElement;
const selectedOperatorType = selectElement.value;
const selectedOperator = predicate.field?.validOperators.find(operator => operator.operatorType === selectedOperatorType);
if (selectedOperator) {
predicate.operator = selectedOperator;
this.queryChanged.emit(); // Assuming `queryChanged` is an EventEmitter you've defined somewhere in your component
}
}
addPredicate(): void { addPredicate(): void {
this.query.predicates.push({ field: null, operator: null, value: null }); this.query.predicates.push({ field: null, operator: null, value: null });
this.queryChanged.emit(); this.queryChanged.emit();