Skip to content

Commit 55a0037

Browse files
committed
docs(core): add docs for injectBeforeRender
1 parent 5e45354 commit 55a0037

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed

libs/core/src/lib/utils/before-render.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,35 @@ import { assertInjector } from 'ngxtension/assert-injector';
33
import { injectStore } from '../store';
44
import { NgtBeforeRenderRecord } from '../types';
55

6+
/**
7+
* `injectBeforeRender` invokes its callback on every frame. Hence, the notion of tracking
8+
* changes (i.e: signals) does not really matter since we're getting latest values of the things we need on every frame anyway.
9+
*
10+
* If `priority` is dynamic, consumers should set up `injectBeforeRender` in
11+
* an `effect` and track `priority` changes. Make use of `onCleanup` to clean up
12+
* previous before render subscription
13+
*
14+
* @example
15+
* ```ts
16+
* const injector = inject(Injector);
17+
*
18+
* effect((onCleanup) => {
19+
* const priority = this.priority(); // track priority
20+
*
21+
* const sub = injectBeforeRender(
22+
* ({ gl, camera }) => {
23+
* // before render logic
24+
* },
25+
* {
26+
* priority,
27+
* injector, // injector is needed since injectBeforeRender is invoked in effect body
28+
* }
29+
* });
30+
*
31+
* onCleanup(() => sub());
32+
* });
33+
* ```
34+
*/
635
export function injectBeforeRender(
736
cb: NgtBeforeRenderRecord['callback'],
837
{ priority = 0, injector }: { priority?: number; injector?: Injector } = {},

0 commit comments

Comments
 (0)