8000 refactor(cdk): improve list-template-manager error messages · rx-angular/rx-angular@ffe37a0 · GitHub
[go: up one dir, main page]

Skip to content

Commit ffe37a0

Browse files
committed
refactor(cdk): improve list-template-manager error messages
1 parent 70173f6 commit ffe37a0

File tree

1 file changed

+33
-27
lines changed

1 file changed

+33
-27
lines changed

libs/cdk/template/src/lib/list-template-manager.ts

Lines changed: 33 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ export interface RxListManager<T> {
4343

4444
export function createListTemplateManager<
4545
T,
46-
C extends RxListViewContext<T>
46+
C extends RxListViewContext<T>,
4747
>(config: {
4848
renderSettings: RxRenderSettings;
4949
templateSettings: RxListTemplateSettings<T, C, RxListViewComputedContext> & {
@@ -92,7 +92,7 @@ export function createListTemplateManager<
9292
strategyHandling$.next(nextConfig);
9393
},
9494
render(
95-
values$: Observable<NgIterable<T>>
95+
values$: Observable<NgIterable<T>>,
9696
): Observable<NgIterable<T> | null> {
9797
return values$.pipe(render());
9898
},
@@ -105,7 +105,7 @@ export function createListTemplateManager<
105105
partiallyFinished = false;
106106
errorHandler.handleError(err);
107107
return of(null);
108-
})
108+
}),
109109
);
110110
}
111111

@@ -116,24 +116,30 @@ export function createListTemplateManager<
116116
strategyHandling$.strategy$.pipe(distinctUntilChanged()),
117117
]).pipe(
118118
map(([iterable, strategy]) => {
119-
const differ = getDiffer(iterable);
120-
let changes: IterableChanges<T>;
121-
if (differ) {
122-
if (partiallyFinished) {
123-
const currentIterable = [];
124-
for (let i = 0, ilen = viewContainerRef.length; i < ilen; i++) {
125-
const viewRef = <EmbeddedViewRef<C>>viewContainerRef.get(i);
126-
currentIterable[i] = viewRef.context.$implicit;
119+
try {
120+
const differ = getDiffer(iterable);
121+
let changes: IterableChanges<T>;
122+
if (differ) {
123+
if (partiallyFinished) {
124+
const currentIterable = [];
125+
for (let i = 0, ilen = viewContainerRef.length; i < ilen; i++) {
126+
const viewRef = <EmbeddedViewRef<C>>viewContainerRef.get(i);
127+
currentIterable[i] = viewRef.context.$implicit;
128+
}
129+
differ.diff(currentIterable);
127130
}
128-
differ.diff(currentIterable);
131+
changes = differ.diff(iterable);
129132
}
130-
changes = differ.diff(iterable);
133+
return {
134+
changes,
135+
iterable,
136+
strategy,
137+
};
138+
} catch {
139+
throw new Error(
140+
`Error trying to diff '${iterable}'. Only arrays and iterables are allowed`,
141+
);
131142
}
132-
return {
133-
changes,
134-
iterable,
135-
strategy,
136-
};
137143
}),
138144
// Cancel old renders
139145
switchMap(({ changes, iterable, strategy }) => {
@@ -149,25 +155,25 @@ export function createListTemplateManager<
149155
const applyChanges$ = getObservablesFromChangesArray(
150156
changesArr,
151157
strategy,
152-
items.length
158+
items.length,
153159
);
154160
partiallyFinished = true;
155161
notifyParent = insertedOrRemoved && parent;
156162
return combineLatest(
157-
applyChanges$.length > 0 ? applyChanges$ : [of(null)]
163+
applyChanges$.length > 0 ? applyChanges$ : [of(null)],
158164
).pipe(
159165
tap(() => (partiallyFinished = false)),
160166
notifyAllParentsIfNeeded(
161167
injectingViewCdRef,
162168
strategy,
163169
() => notifyParent,
164-
ngZone
170+
ngZone,
165171
),
166172
handleError(),
167-
map(() => iterable)
173+
map(() => iterable),
168174
);
169175
}),
170-
handleError()
176+
handleError(),
171177
);
172178
}
173179

@@ -185,7 +191,7 @@ export function createListTemplateManager<
185191
function getObservablesFromChangesArray(
186192
changes: RxListTemplateChange<T>[],
187193
strategy: RxStrategyCredentials,
188-
count: number
194+
count: number,
189195
): Observable<RxListTemplateChangeType>[] {
190196
return changes.length > 0
191197
? changes.map((change) => {
@@ -203,7 +209,7 @@ export function createListTemplateManager<
203209
payload[2],
204210
payload[0],
205211
payload[1],
206-
count
212+
count,
207213
);
208214
break;
209215
case RxListTemplateChangeType.remove:
@@ -216,12 +222,12 @@ export function createListTemplateManager<
216222
listViewHandler.updateUnchangedContext(
217223
payload[0],
218224
7338 payload[1],
219-
count
225+
count,
220226
);
221227
break;
222228
}
223229
},
224-
{ ngZone }
230+
{ ngZone },
225231
);
226232
})
227233
: [of(null)];

0 commit comments

Comments
 (0)
0