Skip to content

Commit 4e6470d

Browse files
committed
fix: use RendererFactory2 to inject into NgtRenderer instead of using private api
1 parent 30e8ccd commit 4e6470d

File tree

5 files changed

+29
-42
lines changed

5 files changed

+29
-42
lines changed

apps/demo/src/app/animation-keyframes/animation-keyframes.component.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,14 @@ import { DemoOrbitControls } from '../ui-orbit-controls/orbit-controls.component
2020
schemas: [CUSTOM_ELEMENTS_SCHEMA],
2121
})
2222
export class Scene {
23+
private readonly stats = Stats();
2324
private readonly gl = inject(NgtStore).get('gl');
2425
private readonly pmremGenerator = new THREE.PMREMGenerator(this.gl);
2526

2627
readonly texture = this.pmremGenerator.fromScene(new RoomEnvironment(), 0.04).texture;
2728

28-
private readonly stats = Stats();
29-
3029
private mixer?: THREE.AnimationMixer;
30+
3131
readonly model$ = injectNgtLoader(
3232
() => GLTFLoader,
3333
'assets/LittlestTokyo.glb',

apps/demo/src/app/cubes/cubes.component.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { Component, CUSTOM_ELEMENTS_SCHEMA, ElementRef, inject, Input, ViewChild } from '@angular/core';
2-
import { injectBeforeRender, NgtArgs, NgtCanvas, NgtStore } from 'angular-three';
1+
import { Component, CUSTOM_ELEMENTS_SCHEMA, ElementRef, Input, ViewChild } from '@angular/core';
2+
import { injectBeforeRender, NgtArgs, NgtCanvas } from 'angular-three';
33
import * as THREE from 'three';
44
import { DemoOrbitControls } from '../ui-orbit-controls/orbit-controls.component';
55

@@ -59,11 +59,7 @@ export class Cube {
5959
imports: [NgtArgs, Cube, DemoOrbitControls],
6060
schemas: [CUSTOM_ELEMENTS_SCHEMA],
6161
})
62-
export class Scene {
63-
private readonly store = inject(NgtStore);
64-
readonly camera = this.store.get('camera');
65-
readonly glDom = this.store.get('gl', 'domElement');
66-
}
62+
export class Scene {}
6763

6864
@Component({
6965
standalone: true,

apps/demo/src/app/vertex-colors-instance/vertex-colors-instance.component.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { Component, CUSTOM_ELEMENTS_SCHEMA, ElementRef, inject, ViewChild } from '@angular/core';
2-
import { NgtArgs, NgtCanvas, NgtStore } from 'angular-three';
1+
import { Component, CUSTOM_ELEMENTS_SCHEMA, ElementRef, ViewChild } from '@angular/core';
2+
import { NgtArgs, NgtCanvas } from 'angular-three';
33
// @ts-expect-error no type def for nice-color-palettes
44
import niceColors from 'nice-color-palettes';
55
import * as THREE from 'three';
@@ -59,11 +59,7 @@ export class ColorsInstances {
5959
imports: [NgtArgs, ColorsInstances, DemoOrbitControls],
6060
schemas: [CUSTOM_ELEMENTS_SCHEMA],
6161
})
62-
export class Scene {
63-
private readonly store = inject(NgtStore);
64-
readonly camera = this.store.get('camera');
65-
readonly glDom = this.store.get('gl', 'domElement');
66-
}
62+
export class Scene {}
6763

6864
@Component({
6965
standalone: true,

apps/demo/src/app/view-cube/view-cube.component.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -87,11 +87,7 @@ export class ViewCube extends NgtRxStore {
8787
imports: [ViewCube, NgtArgs, DemoOrbitControls],
8888
schemas: [CUSTOM_ELEMENTS_SCHEMA],
8989
})
90-
export class Scene {
91-
private readonly store = inject(NgtStore);
92-
readonly camera = this.store.get('camera');
93-
readonly glDom = this.store.get('gl', 'domElement');
94-
}
90+
export class Scene {}
9591

9692
@Component({
9793
selector: 'demo-view-cube',

libs/angular-three/src/lib/renderer/renderer.ts

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { ChangeDetectorRef, inject, Injectable, Renderer2, RendererFactory2, RendererType2 } from '@angular/core';
2-
import { ɵDomRendererFactory2 as DomRendererFactory2 } from '@angular/platform-browser';
32
import { NGT_CATALOGUE } from '../di/catalogue';
43
import { NgtStore } from '../stores/store';
54
import { getLocalState, prepare } from '../utils/instance';
@@ -11,7 +10,7 @@ import { attachThreeChild, kebabToPascal, processThreeEvent, removeThreeChild, S
1110

1211
@Injectable()
1312
export class NgtRendererFactory implements RendererFactory2 {
14-
private readonly domRendererFactory = inject(DomRendererFactory2);
13+
private readonly delegateRendererFactory = inject(RendererFactory2, { skipSelf: true });
1514
private readonly cdr = inject(ChangeDetectorRef);
1615
private readonly store = inject(NgtStore);
1716
private readonly catalogue = inject(NGT_CATALOGUE);
@@ -20,8 +19,8 @@ export class NgtRendererFactory implements RendererFactory2 {
2019
private rendererMap = new Map<string, Renderer2>();
2120

2221
createRenderer(hostElement: any, type: RendererType2 | null): Renderer2 {
23-
const domRenderer = this.domRendererFactory.createRenderer(hostElement, type);
24-
if (!type) return domRenderer;
22+
const delegateRenderer = this.delegateRendererFactory.createRenderer(hostElement, type);
23+
if (!type) return delegateRenderer;
2524

2625
let renderer = this.rendererMap.get(type.id);
2726
if (renderer) return renderer;
@@ -32,7 +31,7 @@ export class NgtRendererFactory implements RendererFactory2 {
3231
cdr: this.cdr,
3332
compoundPrefixes: this.compoundPrefixes,
3433
});
35-
renderer = new NgtRenderer(domRenderer, store, this.catalogue, true);
34+
renderer = new NgtRenderer(delegateRenderer, store, this.catalogue, true);
3635
this.rendererMap.set(type.id, renderer);
3736
}
3837

@@ -42,7 +41,7 @@ export class NgtRendererFactory implements RendererFactory2 {
4241
cdr: this.cdr,
4342
compoundPrefixes: this.compoundPrefixes,
4443
});
45-
renderer = new NgtRenderer(domRenderer, store, this.catalogue);
44+
renderer = new NgtRenderer(delegateRenderer, store, this.catalogue);
4645
this.rendererMap.set(type.id, renderer);
4746
}
4847

@@ -54,14 +53,14 @@ export class NgtRenderer implements Renderer2 {
5453
private first = false;
5554

5655
constructor(
57-
private readonly domRenderer: Renderer2,
56+
private readonly delegate: Renderer2,
5857
private readonly store: NgtRendererStore,
5958
private readonly catalogue: Record<string, new (...args: any[]) => any>,
6059
private readonly root = false
6160
) {}
6261

6362
createElement(name: string, namespace?: string | null | undefined) {
64-
const element = this.domRenderer.createElement(name, namespace);
63+
const element = this.delegate.createElement(name, namespace);
6564

6665
// on first pass, we return the Root Scene as the root node
6766
if (this.root && !this.first) {
@@ -121,7 +120,7 @@ export class NgtRenderer implements Renderer2 {
121120
}
122121

123122
createComment(value: string) {
124-
const comment = this.domRenderer.createComment(value);
123+
const comment = this.delegate.createComment(value);
125124
return this.store.createNode('comment', comment);
126125
}
127126

@@ -266,7 +265,7 @@ export class NgtRenderer implements Renderer2 {
266265

267266
parentNode(node: NgtRendererNode) {
268267
if (node.__ngt_renderer__?.[NgtRendererClassId.parent]) return node.__ngt_renderer__[NgtRendererClassId.parent];
269-
return this.domRenderer.parentNode(node);
268+
return this.delegate.parentNode(node);
270269
}
271270

272271
setAttribute(el: NgtRendererNode, name: string, value: string, namespace?: string | null | undefined): void {
@@ -342,17 +341,17 @@ export class NgtRenderer implements Renderer2 {
342341
}
343342

344343
get data(): { [key: string]: any } {
345-
return this.domRenderer.data;
344+
return this.delegate.data;
346345
}
347-
createText = this.domRenderer.createText.bind(this.domRenderer);
348-
destroy = this.domRenderer.destroy.bind(this.domRenderer);
346+
createText = this.delegate.createText.bind(this.delegate);
347+
destroy = this.delegate.destroy.bind(this.delegate);
349348
destroyNode: ((node: any) => void) | null = null;
350-
selectRootElement = this.domRenderer.selectRootElement.bind(this.domRenderer);
351-
nextSibling = this.domRenderer.nextSibling.bind(this.domRenderer);
352-
removeAttribute = this.domRenderer.removeAttribute.bind(this.domRenderer);
353-
addClass = this.domRenderer.addClass.bind(this.domRenderer);
354-
removeClass = this.domRenderer.removeClass.bind(this.domRenderer);
355-
setStyle = this.domRenderer.setStyle.bind(this.domRenderer);
356-
removeStyle = this.domRenderer.removeStyle.bind(this.domRenderer);
357-
setValue = this.domRenderer.setValue.bind(this.domRenderer);
349+
selectRootElement = this.delegate.selectRootElement.bind(this.delegate);
350+
nextSibling = this.delegate.nextSibling.bind(this.delegate);
351+
removeAttribute = this.delegate.removeAttribute.bind(this.delegate);
352+
addClass = this.delegate.addClass.bind(this.delegate);
353+
removeClass = this.delegate.removeClass.bind(this.delegate);
354+
setStyle = this.delegate.setStyle.bind(this.delegate);
355+
removeStyle = this.delegate.removeStyle.bind(this.delegate);
356+
setValue = this.delegate.setValue.bind(this.delegate);
358357
}

0 commit comments

Comments
 (0)