Skip to content

Commit 116b201

Browse files
author
Ben Grynhaus
committed
Accept an NgZone in ReactWrapperComponent to prepare for better template change detection
1 parent 33ac0de commit 116b201

27 files changed

+294
-76
lines changed

libs/core/src/lib/components/wrapper-component.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
ElementRef,
1010
Injector,
1111
Input,
12+
NgZone,
1213
OnChanges,
1314
Renderer2,
1415
SimpleChanges,
@@ -48,8 +49,21 @@ export type JsxRenderFunc<TContext> = (context: TContext) => JSX.Element;
4849
export type ContentClassValue = string[] | Set<string> | { [klass: string]: any };
4950
export type ContentStyleValue = string | StyleObject;
5051

52+
/**
53+
* Optional options to pass to `ReactWrapperComponent`.
54+
*/
5155
export interface WrapperComponentOptions {
56+
/**
57+
* Whether the host's `display` should be set to the root child node's`display`.
58+
* @default `false`.
59+
*/
5260
readonly setHostDisplay?: boolean;
61+
62+
/**
63+
* The zone to use to track changes to inner (Angular) templates & components.
64+
* @default `undefined`.
65+
*/
66+
readonly ngZone?: NgZone;
5367
}
5468

5569
const defaultWrapperComponentOptions: WrapperComponentOptions = {
@@ -65,6 +79,7 @@ export abstract class ReactWrapperComponent<TProps extends {}> implements AfterV
6579
private _contentClass: Many<ContentClassValue>;
6680
private _contentStyle: ContentStyleValue;
6781

82+
private _ngZone: NgZone;
6883
private _shouldSetHostDisplay: boolean;
6984

7085
protected abstract reactNodeRef: ElementRef<HTMLElement>;
@@ -119,8 +134,9 @@ export abstract class ReactWrapperComponent<TProps extends {}> implements AfterV
119134
public readonly elementRef: ElementRef<HTMLElement>,
120135
private readonly changeDetectorRef: ChangeDetectorRef,
121136
private readonly renderer: Renderer2,
122-
{ setHostDisplay }: WrapperComponentOptions = defaultWrapperComponentOptions
137+
{ setHostDisplay, ngZone }: WrapperComponentOptions = defaultWrapperComponentOptions
123138
) {
139+
this._ngZone = ngZone;
124140
this._shouldSetHostDisplay = setHostDisplay;
125141
}
126142

libs/fabric/src/lib/components/breadcrumb/breadcrumb.component.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,16 @@
22
// Licensed under the MIT License.
33

44
import { InputRendererOptions, JsxRenderFunc, ReactWrapperComponent } from '@angular-react/core';
5-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Input, OnInit, Renderer2, ViewChild } from '@angular/core';
5+
import {
6+
ChangeDetectionStrategy,
7+
ChangeDetectorRef,
8+
Component,
9+
ElementRef,
10+
Input,
11+
OnInit,
12+
Renderer2,
13+
ViewChild,
14+
} from '@angular/core';
615
import { IBreadcrumbItem, IBreadcrumbProps } from 'office-ui-fabric-react/lib/Breadcrumb';
716

817
@Component({

libs/fabric/src/lib/components/button/action-button.component.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT License.
33

4-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Renderer2, ViewChild } from '@angular/core';
4+
import {
5+
ChangeDetectionStrategy,
6+
ChangeDetectorRef,
7+
Component,
8+
ElementRef,
9+
NgZone,
10+
Renderer2,
11+
ViewChild,
12+
} from '@angular/core';
513
import { FabBaseButtonComponent } from './base-button.component';
614

715
@Component({
@@ -57,7 +65,7 @@ export class FabActionButtonComponent extends FabBaseButtonComponent {
5765
@ViewChild('reactNode')
5866
reactNodeRef: ElementRef;
5967

60-
constructor(elementRef: ElementRef, changeDetectorRef: ChangeDetectorRef, renderer: Renderer2) {
61-
super(elementRef, changeDetectorRef, renderer);
68+
constructor(elementRef: ElementRef, changeDetectorRef: ChangeDetectorRef, renderer: Renderer2, ngZone: NgZone) {
69+
super(elementRef, changeDetectorRef, renderer, ngZone);
6270
}
6371
}

libs/fabric/src/lib/components/button/base-button.component.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// Licensed under the MIT License.
33

44
import { InputRendererOptions, JsxRenderFunc, ReactWrapperComponent } from '@angular-react/core';
5-
import { ChangeDetectorRef, ElementRef, EventEmitter, Input, OnInit, Output, Renderer2 } from '@angular/core';
5+
import { ChangeDetectorRef, ElementRef, EventEmitter, Input, NgZone, OnInit, Output, Renderer2 } from '@angular/core';
66
import { IButtonProps } from 'office-ui-fabric-react/lib/Button';
77

88
export abstract class FabBaseButtonComponent extends ReactWrapperComponent<IButtonProps> implements OnInit {
@@ -90,8 +90,8 @@ export abstract class FabBaseButtonComponent extends ReactWrapperComponent<IButt
9090
onRenderChildren: (props?: IButtonProps, defaultRender?: JsxRenderFunc<IButtonProps>) => JSX.Element;
9191
onRenderMenuIcon: (props?: IButtonProps, defaultRender?: JsxRenderFunc<IButtonProps>) => JSX.Element;
9292

93-
constructor(elementRef: ElementRef, changeDetectorRef: ChangeDetectorRef, renderer: Renderer2) {
94-
super(elementRef, changeDetectorRef, renderer, { setHostDisplay: true });
93+
constructor(elementRef: ElementRef, changeDetectorRef: ChangeDetectorRef, renderer: Renderer2, ngZone: NgZone) {
94+
super(elementRef, changeDetectorRef, renderer, { ngZone, setHostDisplay: true });
9595

9696
// coming from React context - we need to bind to this so we can access the Angular Component properties
9797
this.onMenuClickHandler = this.onMenuClickHandler.bind(this);

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

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT License.
33

4-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Renderer2, ViewChild } from '@angular/core';
4+
import {
5+
ChangeDetectionStrategy,
6+
ChangeDetectorRef,
7+
Component,
8+
ElementRef,
9+
NgZone,
10+
Renderer2,
11+
ViewChild,
12+
} from '@angular/core';
513
import { FabBaseButtonComponent } from './base-button.component';
614

715
@Component({
@@ -57,7 +65,7 @@ export class FabCommandBarButtonComponent extends FabBaseButtonComponent {
5765
@ViewChild('reactNode')
5866
reactNodeRef: ElementRef;
5967

60-
constructor(elementRef: ElementRef, changeDetectorRef: ChangeDetectorRef, renderer: Renderer2) {
61-
super(elementRef, changeDetectorRef, renderer);
68+
constructor(elementRef: ElementRef, changeDetectorRef: ChangeDetectorRef, renderer: Renderer2, ngZone: NgZone) {
69+
super(elementRef, changeDetectorRef, renderer, ngZone);
6270
}
6371
}

libs/fabric/src/lib/components/button/compound-button.component.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT License.
33

4-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Renderer2, ViewChild } from '@angular/core';
4+
import {
5+
ChangeDetectionStrategy,
6+
ChangeDetectorRef,
7+
Component,
8+
ElementRef,
9+
NgZone,
10+
Renderer2,
11+
ViewChild,
12+
} from '@angular/core';
513
import { FabBaseButtonComponent } from './base-button.component';
614

715
@Component({
@@ -57,7 +65,7 @@ export class FabCompoundButtonComponent extends FabBaseButtonComponent {
5765
@ViewChild('reactNode')
5866
reactNodeRef: ElementRef;
5967

60-
constructor(elementRef: ElementRef, changeDetectorRef: ChangeDetectorRef, renderer: Renderer2) {
61-
super(elementRef, changeDetectorRef, renderer);
68+
constructor(elementRef: ElementRef, changeDetectorRef: ChangeDetectorRef, renderer: Renderer2, ngZone: NgZone) {
69+
super(elementRef, changeDetectorRef, renderer, ngZone);
6270
}
6371
}

libs/fabric/src/lib/components/button/default-button.component.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT License.
33

4-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Renderer2, ViewChild } from '@angular/core';
4+
import {
5+
ChangeDetectionStrategy,
6+
ChangeDetectorRef,
7+
Component,
8+
ElementRef,
9+
NgZone,
10+
Renderer2,
11+
ViewChild,
12+
} from '@angular/core';
513
import { FabBaseButtonComponent } from './base-button.component';
614

715
@Component({
@@ -57,7 +65,7 @@ export class FabDefaultButtonComponent extends FabBaseButtonComponent {
5765
@ViewChild('reactNode')
5866
reactNodeRef: ElementRef;
5967

60-
constructor(elementRef: ElementRef, changeDetectorRef: ChangeDetectorRef, renderer: Renderer2) {
61-
super(elementRef, changeDetectorRef, renderer);
68+
constructor(elementRef: ElementRef, changeDetectorRef: ChangeDetectorRef, renderer: Renderer2, ngZone: NgZone) {
69+
super(elementRef, changeDetectorRef, renderer, ngZone);
6270
}
6371
}

libs/fabric/src/lib/components/button/icon-button.component.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT License.
33

4-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Renderer2, ViewChild } from '@angular/core';
4+
import {
5+
ChangeDetectionStrategy,
6+
ChangeDetectorRef,
7+
Component,
8+
ElementRef,
9+
NgZone,
10+
Renderer2,
11+
ViewChild,
12+
} from '@angular/core';
513
import { FabBaseButtonComponent } from './base-button.component';
614

715
@Component({
@@ -57,7 +65,7 @@ export class FabIconButtonComponent extends FabBaseButtonComponent {
5765
@ViewChild('reactNode')
5866
reactNodeRef: ElementRef;
5967

60-
constructor(elementRef: ElementRef, changeDetectorRef: ChangeDetectorRef, renderer: Renderer2) {
61-
super(elementRef, changeDetectorRef, renderer);
68+
constructor(elementRef: ElementRef, changeDetectorRef: ChangeDetectorRef, renderer: Renderer2, ngZone: NgZone) {
69+
super(elementRef, changeDetectorRef, renderer, ngZone);
6270
}
6371
}

libs/fabric/src/lib/components/button/messagebar-button.component.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT License.
33

4-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Renderer2, ViewChild } from '@angular/core';
4+
import {
5+
ChangeDetectionStrategy,
6+
ChangeDetectorRef,
7+
Component,
8+
ElementRef,
9+
NgZone,
10+
Renderer2,
11+
ViewChild,
12+
} from '@angular/core';
513
import { FabBaseButtonComponent } from './base-button.component';
614

715
@Component({
@@ -57,7 +65,7 @@ export class FabMessageBarButtonComponent extends FabBaseButtonComponent {
5765
@ViewChild('reactNode')
5866
reactNodeRef: ElementRef;
5967

60-
constructor(elementRef: ElementRef, changeDetectorRef: ChangeDetectorRef, renderer: Renderer2) {
61-
super(elementRef, changeDetectorRef, renderer);
68+
constructor(elementRef: ElementRef, changeDetectorRef: ChangeDetectorRef, renderer: Renderer2, ngZone: NgZone) {
69+
super(elementRef, changeDetectorRef, renderer, ngZone);
6270
}
6371
}

libs/fabric/src/lib/components/button/primary-button.component.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT License.
33

4-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Renderer2, ViewChild } from '@angular/core';
4+
import {
5+
ChangeDetectionStrategy,
6+
ChangeDetectorRef,
7+
Component,
8+
ElementRef,
9+
NgZone,
10+
Renderer2,
11+
ViewChild,
12+
} from '@angular/core';
513
import { FabBaseButtonComponent } from './base-button.component';
614

715
@Component({
@@ -57,7 +65,7 @@ export class FabPrimaryButtonComponent extends FabBaseButtonComponent {
5765
@ViewChild('reactNode')
5866
reactNodeRef: ElementRef;
5967

60-
constructor(elementRef: ElementRef, changeDetectorRef: ChangeDetectorRef, renderer: Renderer2) {
61-
super(elementRef, changeDetectorRef, renderer);
68+
constructor(elementRef: ElementRef, changeDetectorRef: ChangeDetectorRef, renderer: Renderer2, ngZone: NgZone) {
69+
super(elementRef, changeDetectorRef, renderer, ngZone);
6270
}
6371
}

0 commit comments

Comments
 (0)