Skip to content

Commit 498cfde

Browse files
authored
fix typed-changes failing in some AOT configurations (#86)
1 parent a6155a5 commit 498cfde

File tree

5 files changed

+26
-11
lines changed

5 files changed

+26
-11
lines changed

libs/fabric/src/lib/components/command-bar/command-bar.component.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ export class FabCommandBarComponent extends ReactWrapperComponent<ICommandBarPro
100100
super(elementRef, changeDetectorRef, renderer, { ngZone, setHostDisplay: true });
101101
}
102102

103-
ngOnChanges(changes: TypedChanges<this>) {
103+
ngOnChanges(changes: TypedChanges<FabCommandBarComponent>) {
104104
if (
105105
changes['items'] &&
106106
changes['items'].previousValue !== changes['items'].currentValue &&

libs/fabric/src/lib/components/core/shared/changeable-helper.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
import { EventEmitter, QueryList } from '@angular/core';
55
import { Subscription } from 'rxjs';
66

7-
import { TypedChanges } from '../../../declarations/angular/typed-changes';
8-
import { ItemChangedPayload } from '../../core/declarative/item-changed.payload';
7+
import { ItemChangedPayload, ItemChanges } from '../../core/declarative/item-changed.payload';
98
import { ChangeableItemDirective } from './changeable-item.directive';
109

1110
/**
@@ -21,7 +20,7 @@ export class ChangeableItemHelper<TItem> {
2120
* (Typically called in ngOnChanges)
2221
* @param changes TypedChanges that are to be emitted
2322
*/
24-
emitChanges(changes: TypedChanges<TItem>) {
23+
emitChanges(changes: ItemChanges<TItem>) {
2524
this.onItemChanged.emit({ key: this.key, changes });
2625
}
2726
}

libs/fabric/src/lib/components/core/shared/changeable-item.directive.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33

44
import { EventEmitter, Input, OnInit, Output } from '@angular/core';
55

6-
import { OnChanges, TypedChanges } from '../../../declarations/angular/typed-changes';
7-
import { ItemChangedPayload } from '../../core/declarative/item-changed.payload';
6+
import { OnChanges } from '../../../declarations/angular/typed-changes';
7+
import { ItemChangedPayload, ItemChanges } from '../../core/declarative/item-changed.payload';
88
import { ChangeableItemHelper } from './changeable-helper';
99

1010
/**
@@ -24,7 +24,7 @@ export abstract class ChangeableItemDirective<TItem> implements OnChanges<Change
2424
this.changeableItemHelper = new ChangeableItemHelper(this.key);
2525
}
2626

27-
ngOnChanges(changes: TypedChanges<TItem>) {
27+
ngOnChanges(changes: ItemChanges<TItem>) {
2828
if (this.changeableItemHelper) {
2929
this.changeableItemHelper.emitChanges(changes);
3030
}

libs/fabric/src/lib/components/details-list/details-list.component.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ export class FabDetailsListComponent extends ReactWrapperComponent<IDetailsListP
226226
this.onRenderMissingItem = (index, rowProps) => missingItemRenderer({ index, rowProps });
227227
}
228228

229-
ngOnChanges(changes: TypedChanges<this>) {
229+
ngOnChanges(changes: TypedChanges<FabDetailsListComponent>) {
230230
if (
231231
changes['columns'] &&
232232
changes['columns'].currentValue &&

libs/fabric/src/lib/declarations/angular/typed-changes.d.ts

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,25 @@ export interface TypedChange<T> extends AngularCore.SimpleChange {
88
readonly currentValue: T;
99
}
1010

11-
export type TypedChanges<TComponent> = AngularCore.SimpleChanges &
12-
{ [P in keyof TComponent]: TypedChange<TComponent[P]> };
11+
/**
12+
* Known Angular keys that components often have
13+
*/
14+
export type AngularLifeCycleKeys =
15+
| keyof AngularCore.AfterContentChecked
16+
| keyof AngularCore.AfterContentInit
17+
| keyof AngularCore.AfterViewChecked
18+
| keyof AngularCore.AfterViewInit
19+
| keyof AngularCore.DoCheck
20+
| keyof AngularCore.OnChanges
21+
| keyof AngularCore.OnDestroy
22+
| keyof AngularCore.OnInit;
23+
24+
// Only take string keys from TComponent, since those are the only valid input property types.
25+
// Exclude any known stuff that can be eliminated as non-Inputs.
26+
export type InputKeys<TComponent> = Exclude<keyof TComponent & string, AngularLifeCycleKeys>;
27+
28+
export type TypedChanges<TComponent> = Partial<{ [P in InputKeys<TComponent>]: TypedChange<TComponent[P]> }>;
1329

1430
export interface OnChanges<TComponent> extends AngularCore.OnChanges {
15-
ngOnChanges(changes: Partial<TypedChanges<TComponent>>): void;
31+
ngOnChanges(changes: TypedChanges<TComponent>): void;
1632
}

0 commit comments

Comments
 (0)