1- import { Injector , Signal , effect , signal , untracked } from '@angular/core' ;
1+ import { Injector , Signal , effect , signal } from '@angular/core' ;
22import { assertInjector } from 'ngxtension/assert-injector' ;
33import { Loader , Object3D } from 'three' ;
44import { NgtAnyRecord } from './types' ;
@@ -43,9 +43,7 @@ function normalizeInputs(input: string | string[] | Record<string, string>) {
4343 urls = Object . values ( input ) ;
4444 }
4545
46- return urls . map ( ( url ) => {
47- return url . includes ( 'undefined' ) || url . includes ( 'null' ) || ! url ? '' : url ;
48- } ) ;
46+ return urls . map ( ( url ) => ( url . includes ( 'undefined' ) || url . includes ( 'null' ) || ! url ? '' : url ) ) ;
4947}
5048
5149function load <
@@ -66,7 +64,7 @@ function load<
6664 onProgress ?: ( event : ProgressEvent ) => void ;
6765 } = { } ,
6866) {
69- return ( ) : Array < Promise < any > > | null => {
67+ return ( ) : Array < Promise < any > > => {
7068 const urls = normalizeInputs ( inputs ( ) ) ;
7169
7270 let loader : Loader < TData > = memoizedLoaders . get ( loaderConstructorFactory ( urls ) ) ;
@@ -76,11 +74,9 @@ function load<
7674 }
7775
7876 if ( extensions ) extensions ( loader ) ;
79- // TODO: reevaluate this
77+
8078 return urls . map ( ( url ) => {
81- if ( url === '' ) {
82- return null ;
83- }
79+ if ( url === '' ) return Promise . resolve ( null ) ;
8480
8581 if ( ! cached . has ( url ) ) {
8682 cached . set (
@@ -105,6 +101,7 @@ function load<
105101 } ) ,
106102 ) ;
107103 }
104+
108105 return cached . get ( url ) ! ;
109106 } ) ;
110107 } ;
@@ -141,31 +138,25 @@ function _injectLoader<
141138 onProgress,
142139 onLoad : onLoad as ( data : unknown ) => void ,
143140 } ) ;
144- effect (
145- ( ) => {
146- const originalUrls = inputs ( ) ;
147- const cachedEffect = effector ( ) ;
148- if ( cachedEffect === null && untracked ( response ) !== null ) {
149- response . set ( null ) ;
150- } else if ( cachedEffect !== null ) {
151- Promise . all ( cachedEffect ) . then ( ( results ) => {
152- response . update ( ( ) => {
153- if ( Array . isArray ( originalUrls ) ) return results ;
154- if ( typeof originalUrls === 'string' ) return results [ 0 ] ;
155- const keys = Object . keys ( originalUrls ) ;
156- return keys . reduce (
157- ( result , key ) => {
158- ( result as NgtAnyRecord ) [ key ] = results [ keys . indexOf ( key ) ] ;
159- return result ;
160- } ,
161- { } as { [ key in keyof TUrl ] : NgtBranchingReturn < TReturn , NgtGLTFLike , NgtGLTFLike & NgtObjectMap > } ,
162- ) ;
163- } ) ;
164- } ) ;
165- }
166- } ,
167- { allowSignalWrites : true } ,
168- ) ;
141+
142+ effect ( ( ) => {
143+ const originalUrls = inputs ( ) ;
144+ const cachedEffect = effector ( ) ;
145+ Promise . all ( cachedEffect ) . then ( ( results ) => {
146+ response . update ( ( ) => {
147+ if ( Array . isArray ( originalUrls ) ) return results ;
148+ if ( typeof originalUrls === 'string' ) return results [ 0 ] ;
149+ const keys = Object . keys ( originalUrls ) ;
150+ return keys . reduce (
151+ ( result , key ) => {
152+ ( result as NgtAnyRecord ) [ key ] = results [ keys . indexOf ( key ) ] ;
153+ return result ;
154+ } ,
155+ { } as { [ key in keyof TUrl ] : NgtBranchingReturn < TReturn , NgtGLTFLike , NgtGLTFLike & NgtObjectMap > } ,
156+ ) ;
157+ } ) ;
158+ } ) ;
159+ } ) ;
169160
170161 return response . asReadonly ( ) ;
171162 } ) ;
0 commit comments