Skip to content
This repository was archived by the owner on Feb 22, 2018. It is now read-only.

Commit b32beec

Browse files
committed
fix(Filter): Add support for maps
closes #715
1 parent 26cba06 commit b32beec

File tree

2 files changed

+51
-5
lines changed

2 files changed

+51
-5
lines changed

lib/core/scope.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1009,6 +1009,8 @@ class _FilterWrapper extends FunctionApply {
10091009
if (!identical(value, lastValue)) {
10101010
if (value is CollectionChangeRecord) {
10111011
args[i] = (value as CollectionChangeRecord).iterable;
1012+
} else if (value is MapChangeRecord) {
1013+
args[i] = (value as MapChangeRecord).map;
10121014
} else {
10131015
args[i] = value;
10141016
}

test/core/scope_spec.dart

Lines changed: 49 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ void main() {
1919
..type(_MultiplyFilter)
2020
..type(_ListHeadFilter)
2121
..type(_ListTailFilter)
22-
..type(_SortFilter);
22+
..type(_SortFilter)
23+
..type(_IdentityFilter)
24+
..type(_MapKeys);
2325
}));
2426

2527
describe('AST Bridge', () {
@@ -204,6 +206,29 @@ void main() {
204206
expect(logger).toEqual(['sort']);
205207
logger.clear();
206208
}));
209+
210+
iit('should support maps in filters', inject((Logger logger, Map context,
211+
RootScope rootScope,
212+
AstParser parser,
213+
FilterMap filters) {
214+
context['a'] = {'foo': 'bar'};
215+
rootScope.watch(
216+
parser('a | identity | keys', filters: filters),
217+
(value, previous) => logger(value));
218+
rootScope.digest();
219+
expect(logger).toEqual(['identity', 'keys', ['foo']]);
220+
logger.clear();
221+
222+
rootScope.digest();
223+
expect(logger).toEqual([]);
224+
logger.clear();
225+
226+
context['a']['bar'] = 'baz';
227+
rootScope.digest();
228+
expect(logger).toEqual(['identity', 'keys', ['foo', 'bar']]);
229+
logger.clear();
230+
}));
231+
207232
});
208233

209234

@@ -1435,6 +1460,26 @@ void main() {
14351460
});
14361461
}
14371462

1463+
@NgFilter(name: 'identity')
1464+
class _IdentityFilter {
1465+
Logger logger;
1466+
_IdentityFilter(this.logger);
1467+
call(v) {
1468+
logger('identity');
1469+
return v;
1470+
}
1471+
}
1472+
1473+
@NgFilter(name: 'keys')
1474+
class _MapKeys {
1475+
Logger logger;
1476+
_MapKeys(this.logger);
1477+
call(Map m) {
1478+
logger('keys');
1479+
return m.keys;
1480+
}
1481+
}
1482+
14381483
@NgFilter(name: 'multiply')
14391484
class _MultiplyFilter {
14401485
call(a, b) => a * b;
@@ -1443,18 +1488,17 @@ class _MultiplyFilter {
14431488
@NgFilter(name: 'listHead')
14441489
class _ListHeadFilter {
14451490
Logger logger;
1446-
_ListHeadFilter(Logger this.logger);
1491+
_ListHeadFilter(this.logger);
14471492
call(list, head) {
14481493
logger('listHead');
14491494
return [head]..addAll(list);
14501495
}
14511496
}
14521497

1453-
14541498
@NgFilter(name: 'listTail')
14551499
class _ListTailFilter {
14561500
Logger logger;
1457-
_ListTailFilter(Logger this.logger);
1501+
_ListTailFilter(this.logger);
14581502
call(list, tail) {
14591503
logger('listTail');
14601504
return new List.from(list)..add(tail);
@@ -1464,7 +1508,7 @@ class _ListTailFilter {
14641508
@NgFilter(name: 'sort')
14651509
class _SortFilter {
14661510
Logger logger;
1467-
_SortFilter(Logger this.logger);
1511+
_SortFilter(this.logger);
14681512
call(list) {
14691513
logger('sort');
14701514
return new List.from(list)..sort();

0 commit comments

Comments
 (0)