File tree 2 files changed +19
-16
lines changed
packages/react-components/src
2 files changed +19
-16
lines changed Original file line number Diff line number Diff line change 9
9
} from 'react' ;
10
10
import { createPortal , flushSync } from 'react-dom' ;
11
11
import type { Slice , WebComponentRenderer } from './renderer.js' ;
12
+ import { flushMicrotask } from '../utils/flushMicrotask.js' ;
12
13
13
14
export type UseRendererResult < W extends WebComponentRenderer > = readonly [
14
15
portals ?: ReadonlyArray < ReactElement | null > ,
@@ -28,22 +29,6 @@ export type RendererConfig = {
28
29
renderMode ?: 'default' | 'sync' | 'microtask' ;
29
30
} ;
30
31
31
- const renderQueue : Array < ( ...args : any [ ] ) => any > = [ ] ;
32
-
33
- function flushMicrotask ( callback : ( ...args : any [ ] ) => any ) {
34
- renderQueue . push ( callback ) ;
35
-
36
- if ( renderQueue . length === 1 ) {
37
- queueMicrotask ( ( ) => {
38
- flushSync ( ( ) => {
39
- while ( renderQueue . length ) {
40
- renderQueue . shift ( ) ! ( ) ;
41
- }
42
- } ) ;
43
- } ) ;
44
- }
45
- }
46
-
47
32
export function useRenderer < P extends { } , W extends WebComponentRenderer > (
48
33
node : ReactNode ,
49
34
convert ?: ( props : Slice < Parameters < W > , 1 > ) => PropsWithChildren < P > ,
Original file line number Diff line number Diff line change
1
+ import { flushSync } from 'react-dom' ;
2
+
3
+ let callbackQueue : Function [ ] = [ ] ;
4
+
5
+ export function flushMicrotask ( callback : Function ) {
6
+ callbackQueue . push ( callback ) ;
7
+
8
+ if ( callbackQueue . length === 1 ) {
9
+ queueMicrotask ( ( ) => {
10
+ const queue = callbackQueue ;
11
+ callbackQueue = [ ] ;
12
+
13
+ flushSync ( ( ) => {
14
+ queue . forEach ( ( callback ) => callback ( ) ) ;
15
+ } ) ;
16
+ } ) ;
17
+ }
18
+ }
You can’t perform that action at this time.
0 commit comments