Skip to content

Commit 96e36be

Browse files
committed
Fixed sorting for complex fields Department and Address.
1 parent 71502a3 commit 96e36be

File tree

3 files changed

+5
-21
lines changed

3 files changed

+5
-21
lines changed

web/order_by_pipe.dart

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'dart:mirrors';
2+
import 'common.dart';
23
import 'package:angular2/core.dart';
34
import 'smart_table_record.dart';
45

@@ -16,25 +17,9 @@ class OrderByPipe implements PipeTransform {
1617

1718
List<SmartTableRecord> transform(List<SmartTableRecord> array, String columnName, String order) {
1819
if (columnName.isNotEmpty && order.isNotEmpty) {
19-
bool isColumnExists = false;
20-
Symbol simpleNameAsSymbol;
21-
ClassMirror classMirror = reflectClass(SmartTableRecord);
22-
for (DeclarationMirror m in classMirror.declarations.values) {
23-
simpleNameAsSymbol = m.simpleName;
24-
String simpleName = MirrorSystem.getName(m.simpleName);
25-
if (columnName.compareTo(simpleName) == 0) {
26-
isColumnExists = true;
27-
break;
28-
}
29-
}
30-
if (isColumnExists) {
3120
array.sort((SmartTableRecord a, SmartTableRecord b) {
32-
var value1 = reflect(a)
33-
.getField(simpleNameAsSymbol)
34-
.reflectee;
35-
var value2 = reflect(b)
36-
.getField(simpleNameAsSymbol)
37-
.reflectee;
21+
var value1 = getProperty(a, columnName).reflectee;
22+
var value2 = getProperty(b, columnName).reflectee;
3823
if (value1 is Comparable != true) {
3924
value1 = value1.toString();
4025
value2 = value2.toString();
@@ -47,7 +32,6 @@ class OrderByPipe implements PipeTransform {
4732
return 0;
4833
}
4934
});
50-
}
5135
}
5236
return array;
5337
}

web/sample_data.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ List<SmartTableRecord> sampleRecords = new List(15);
88
void fillSampleData() {
99
sampleRecords[0] = new SmartTableRecord(
1010
'Shaun', 30, Sex.male(), new Department('Australia dept.'),
11-
new Address("Сanberra", "Downing str.", '10b'));
11+
new Address("Canberra", "Downing str.", '10b'));
1212

1313
sampleRecords[1] = new SmartTableRecord(
1414
'Viki', 23, Sex.female(), new Department('Slovakia dept.'),

web/smart_table_component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
<div class="stc-table-div"><table class="stc-table"> <th>Имя <a class="sort-arrow" href="javascript:void(0)" (click)="onSortNameOrderChanged('name', 'des')">&#x25B2;</a> <a class="sort-arrow" href="javascript:void(0)" (click)="onSortNameOrderChanged('name', 'asc')">&#x25BC;</a> </th> <th>Возраст <a class="sort-arrow" href="javascript:void(0)" (click)="onSortNameOrderChanged('age', 'des')">&#x25B2;</a> <a class="sort-arrow" href="javascript:void(0)" (click)="onSortNameOrderChanged('age', 'asc')">&#x25BC;</a> </th> <th>Пол <a class="sort-arrow" href="javascript:void(0)" (click)="onSortNameOrderChanged('sex', 'des')">&#x25B2;</a> <a class="sort-arrow" href="javascript:void(0)" (click)="onSortNameOrderChanged('sex', 'asc')">&#x25BC;</a> </th> <th>Департамент <a class="sort-arrow" href="javascript:void(0)" (click)="onSortNameOrderChanged('department.name', 'des')">&#x25B2;</a> <a class="sort-arrow" href="javascript:void(0)" (click)="onSortNameOrderChanged('department.name', 'asc')">&#x25BC;</a> </th> <th>Адрес <a class="sort-arrow" href="javascript:void(0)" (click)="onSortNameOrderChanged('address.city', 'des')">&#x25B2;</a> <a class="sort-arrow" href="javascript:void(0)" (click)="onSortNameOrderChanged('address.city', 'asc')">&#x25BC;</a> </th> <tr *ngFor="#record of (getFilteredRecords() | orderBy:sortColumnName:sortColumnOrder )"> <td>{{record.name}}</td> <td>{{record.age}}</td> <td>{{record.sex.getValue()}}</td> <td>{{record.department.name}}</td> <td>{{record.address.city}}, {{record.address.street}} {{record.address.building}}</td> </tr> <tr></table></div><div class="stc-filters"> <div class="stc-filter {{filter.name}}" *ngFor="#filter of filters.values"> <h3>{{filter.title}}</h3> <table class="stc-filter-table"> <tr *ngFor="#filterKey of filter.getValuesAndCounts().keys"> <td><input name="{{filter.classFieldName}}" value="{{filterKey}}" type="checkbox" [checked]="filter.isChecked(filterKey)" [disabled]="filter.isDisabled(filterKey)" (click)="filter.onFilterValueClicked(filterKey)"/> </td> <td>{{filterKey}} ({{filter.getValuesAndCounts()[filterKey]}})</td> </tr> <tr> <td></td><td><a href="javascript:void(0)" (click)="filter.clear()" *ngIf="filter.canBeCleared()"><span>Очистить фильтр</span></a></td> </tr> </table> </div></div>
1+
<div class="stc-table-div"><table class="stc-table"> <th>Имя <a class="sort-arrow" href="javascript:void(0)" (click)="onSortNameOrderChanged('name', 'des')">&#x25B2;</a> <a class="sort-arrow" href="javascript:void(0)" (click)="onSortNameOrderChanged('name', 'asc')">&#x25BC;</a> </th> <th>Возраст <a class="sort-arrow" href="javascript:void(0)" (click)="onSortNameOrderChanged('age', 'des')">&#x25B2;</a> <a class="sort-arrow" href="javascript:void(0)" (click)="onSortNameOrderChanged('age', 'asc')">&#x25BC;</a> </th> <th>Пол <a class="sort-arrow" href="javascript:void(0)" (click)="onSortNameOrderChanged('sex', 'des')">&#x25B2;</a> <a class="sort-arrow" href="javascript:void(0)" (click)="onSortNameOrderChanged('sex', 'asc')">&#x25BC;</a> </th> <th>Департамент <a class="sort-arrow" href="javascript:void(0)" (click)="onSortNameOrderChanged('department.name', 'des')">&#x25B2;</a> <a class="sort-arrow" href="javascript:void(0)" (click)="onSortNameOrderChanged('department.name', 'asc')">&#x25BC;</a> </th> <th>Адрес <a class="sort-arrow" href="javascript:void(0)" (click)="onSortNameOrderChanged('address', 'des')">&#x25B2;</a> <a class="sort-arrow" href="javascript:void(0)" (click)="onSortNameOrderChanged('address', 'asc')">&#x25BC;</a> </th> <tr *ngFor="#record of (getFilteredRecords() | orderBy:sortColumnName:sortColumnOrder )"> <td>{{record.name}}</td> <td>{{record.age}}</td> <td>{{record.sex.getValue()}}</td> <td>{{record.department.name}}</td> <td>{{record.address.city}}, {{record.address.street}} {{record.address.building}}</td> </tr> <tr></table></div><div class="stc-filters"> <div class="stc-filter {{filter.name}}" *ngFor="#filter of filters.values"> <h3>{{filter.title}}</h3> <table class="stc-filter-table"> <tr *ngFor="#filterKey of filter.getValuesAndCounts().keys"> <td><input name="{{filter.classFieldName}}" value="{{filterKey}}" type="checkbox" [checked]="filter.isChecked(filterKey)" [disabled]="filter.isDisabled(filterKey)" (click)="filter.onFilterValueClicked(filterKey)"/> </td> <td>{{filterKey}} ({{filter.getValuesAndCounts()[filterKey]}})</td> </tr> <tr> <td></td><td><a href="javascript:void(0)" (click)="filter.clear()" *ngIf="filter.canBeCleared()"><span>Очистить фильтр</span></a></td> </tr> </table> </div></div>

0 commit comments

Comments
 (0)