[results feed] Choose which results to filter with radio buttons
Only three choices are given:
Show all changes
Show latest failures
Show latest unapproved failures
Change-Id: Ifae64742b6d7c2182c38fd2ca9de29c8722fad38
Reviewed-on: https://dart-review.googlesource.com/c/dart_ci/+/130421
Reviewed-by: Alexander Thomas <athom@google.com>
diff --git a/results_feed/lib/src/services/filter_component.dart b/results_feed/lib/src/services/filter_component.dart
index bd027f6..1a88f7a 100644
--- a/results_feed/lib/src/services/filter_component.dart
+++ b/results_feed/lib/src/services/filter_component.dart
@@ -4,7 +4,8 @@
import 'package:angular/angular.dart';
import 'package:angular_components/angular_components.dart';
-import 'package:angular_components/material_toggle/material_toggle.dart';
+import 'package:angular_components/material_radio/material_radio.dart';
+import 'package:angular_components/material_radio/material_radio_group.dart';
import 'package:angular_components/material_select/material_select.dart';
import 'package:angular_components/material_select/material_select_item.dart';
@@ -16,35 +17,35 @@
allConfigurationGroups
], directives: [
coreDirectives,
- MaterialToggleComponent,
+ MaterialRadioComponent,
+ MaterialRadioGroupComponent,
MaterialSelectComponent,
- MaterialSelectItemComponent
+ MaterialSelectItemComponent,
+ NgModel,
], template: '''
- <material-toggle
- (checkedChange)="onShowLatestFailures(\$event)"
- [checked]="filter.showLatestFailures"
- label="Show only latest failures">
- </material-toggle>
- <hr>
- <material-toggle
- (checkedChange)="onShowUnapprovedOnly(\$event)"
- [checked]="filter.showUnapprovedOnly"
- label="Show only unapproved failures">
- </material-toggle>
- <hr>
- <b>Show changes on builders:</b>
- <material-select
- class="bordered-list"
- focusList
- [selection]="groupSelector"
- [itemRenderer]="identityFunction">
- <material-select-item
- *ngFor="let group of allConfigurationGroups"
- focusItem
- [value]="group">
- </material-select-item>
- </material-select>
- ''')
+ <material-radio-group
+ [ngModel]="changeType"
+ (ngModelChange)="setChangeType(\$event)">
+ <material-radio
+ *ngFor="let option of changeTypes"
+ style="display: flex"
+ [value]="option">{{option['label']}}
+ </material-radio>
+ </material-radio-group>
+ <hr>
+ <b>Show changes on builders:</b>
+ <material-select
+ class="bordered-list"
+ focusList
+ [selection]="groupSelector"
+ [itemRenderer]="identityFunction">
+ <material-select-item
+ *ngFor="let group of allConfigurationGroups"
+ focusItem
+ [value]="group">
+ </material-select-item>
+ </material-select>
+''')
class FilterComponent {
static const allConfigurationGroups = Filter.allConfigurationGroups;
@@ -58,6 +59,11 @@
groupSelector = SelectionModel.multi(
selectedValues: service.filter.configurationGroups);
groupSelector.selectionChanges.listen(onSelectionChange);
+ changeType = changeTypes.firstWhere(
+ (type) =>
+ type['latestFailures'] == filter.showLatestFailures &&
+ type['unapprovedOnly'] == filter.showUnapprovedOnly,
+ orElse: () => changeTypes.first);
}
void onSelectionChange(_) {
@@ -73,13 +79,31 @@
filter.updateUrl();
}
- void onShowLatestFailures(bool event) {
- service.filter = filter.copy(showLatestFailures: event);
- filter.updateUrl();
- }
+ List<Map> changeTypes = [
+ {
+ 'label': 'Show all changes',
+ 'latestFailures': false,
+ 'unapprovedOnly': false
+ },
+ {
+ 'label': 'Show latest failures',
+ 'latestFailures': true,
+ 'unapprovedOnly': false
+ },
+ {
+ 'label': 'Show latest unapproved failures',
+ 'latestFailures': true,
+ 'unapprovedOnly': true
+ },
+ ];
- void onShowUnapprovedOnly(bool event) {
- service.filter = filter.copy(showUnapprovedOnly: event);
+ Map changeType;
+
+ void setChangeType(Map event) {
+ changeType = event;
+ service.filter = filter.copy(
+ showLatestFailures: event['latestFailures'],
+ showUnapprovedOnly: event['unapprovedOnly']);
filter.updateUrl();
}