UNPKG

1.6 kBPlain TextView Raw
1import {createFullOverrideContext, updateOverrideContexts} from './repeat-utilities';
2
3/**
4 * A strategy for repeating a template over a number.
5 */
6export class NumberRepeatStrategy {
7 /**
8 * Return the strategies collection observer. In this case none.
9 */
10 getCollectionObserver() {
11 return null;
12 }
13
14 /**
15 * Process the provided Number.
16 * @param value The Number of how many time to iterate.
17 */
18 instanceChanged(repeat, value) {
19 let removePromise = repeat.removeAllViews(true, !repeat.viewsRequireLifecycle);
20 if (removePromise instanceof Promise) {
21 removePromise.then(() => this._standardProcessItems(repeat, value));
22 return;
23 }
24 this._standardProcessItems(repeat, value);
25 }
26
27 /**
28 * @internal
29 */
30 _standardProcessItems(repeat, value) {
31 let childrenLength = repeat.viewCount();
32 let i;
33 let ii;
34 let overrideContext;
35 let viewsToRemove;
36
37 value = Math.floor(value);
38 viewsToRemove = childrenLength - value;
39
40 if (viewsToRemove > 0) {
41 if (viewsToRemove > childrenLength) {
42 viewsToRemove = childrenLength;
43 }
44
45 for (i = 0, ii = viewsToRemove; i < ii; ++i) {
46 repeat.removeView(childrenLength - (i + 1), true, !repeat.viewsRequireLifecycle);
47 }
48
49 return;
50 }
51
52 for (i = childrenLength, ii = value; i < ii; ++i) {
53 overrideContext = createFullOverrideContext(repeat, i, i, ii);
54 repeat.addView(overrideContext.bindingContext, overrideContext);
55 }
56
57 updateOverrideContexts(repeat.views(), 0);
58 }
59}