1- import { Provider } from '@angular/core' ;
1+ import { inject , Provider } from '@angular/core' ;
22import { IMAGE_LOADER , ImageLoaderConfig } from '@angular/common' ;
33
44import imageUrlBuilder from '@sanity/image-url' ;
@@ -7,52 +7,61 @@ import { SANITY_CONFIG, SanityConfig } from '@limitless-angular/sanity/shared';
77
88const DEFAULT_IMAGE_QUALITY = 75 ;
99
10- export function provideSanityLoader ( config : SanityConfig ) : Provider {
10+ export function sanityImageLoader ( config ?: SanityConfig | null ) {
11+ return ( loaderConfig : ImageLoaderConfig ) => {
12+ const {
13+ src,
14+ loaderParams = { } ,
15+ width = loaderParams [ 'width' ] ,
16+ isPlaceholder,
17+ } = loaderConfig ;
18+ const builder = imageUrlBuilder ( config ?? undefined ) ;
19+ let imageBuilder = builder
20+ . image ( src )
21+ . auto ( 'format' )
22+ . fit ( ( loaderParams [ 'fit' ] ?? loaderParams [ 'height' ] ) ? 'min' : 'max' ) ;
23+
24+ if ( width && loaderParams [ 'height' ] && loaderParams [ 'width' ] ) {
25+ imageBuilder = imageBuilder . height (
26+ Math . round ( ( loaderParams [ 'height' ] / loaderParams [ 'width' ] ) * width ) ,
27+ ) ;
28+ }
29+
30+ if ( width ) {
31+ imageBuilder = imageBuilder . width ( width ) ;
32+ }
33+
34+ // Use loaderParams for additional configuration
35+ if ( loaderParams [ 'quality' ] ) {
36+ imageBuilder = imageBuilder . quality ( loaderParams [ 'quality' ] ) ;
37+ } else {
38+ imageBuilder = imageBuilder . quality ( DEFAULT_IMAGE_QUALITY ) ;
39+ }
40+
41+ if ( loaderParams [ 'blur' ] ) {
42+ imageBuilder = imageBuilder . blur ( loaderParams [ 'blur' ] ) ;
43+ }
44+
45+ if ( isPlaceholder ) {
46+ imageBuilder = imageBuilder . blur ( 50 ) . quality ( 20 ) ;
47+ }
48+
49+ return imageBuilder . url ( ) || '' ;
50+ } ;
51+ }
52+
53+ export function provideSanityLoader ( config ?: SanityConfig ) : Provider {
54+ const configProviders = config
55+ ? [ { provide : SANITY_CONFIG , useValue : config } ]
56+ : [ ] ;
57+
1158 return [
12- { provide : SANITY_CONFIG , useValue : config } ,
59+ ... configProviders ,
1360 {
1461 provide : IMAGE_LOADER ,
15- useValue : ( loaderConfig : ImageLoaderConfig ) => {
16- const {
17- src,
18- loaderParams = { } ,
19- width = loaderParams [ 'width' ] ,
20- isPlaceholder,
21- } = loaderConfig ;
22- const builder = imageUrlBuilder ( config ) ;
23- let imageBuilder = builder
24- . image ( src )
25- . auto ( 'format' )
26- . fit ( ( loaderParams [ 'fit' ] ?? loaderParams [ 'height' ] ) ? 'min' : 'max' ) ;
27-
28- if ( width && loaderParams [ 'height' ] && loaderParams [ 'width' ] ) {
29- imageBuilder = imageBuilder . height (
30- Math . round (
31- ( loaderParams [ 'height' ] / loaderParams [ 'width' ] ) * width ,
32- ) ,
33- ) ;
34- }
35-
36- if ( width ) {
37- imageBuilder = imageBuilder . width ( width ) ;
38- }
39-
40- // Use loaderParams for additional configuration
41- if ( loaderParams [ 'quality' ] ) {
42- imageBuilder = imageBuilder . quality ( loaderParams [ 'quality' ] ) ;
43- } else {
44- imageBuilder = imageBuilder . quality ( DEFAULT_IMAGE_QUALITY ) ;
45- }
46-
47- if ( loaderParams [ 'blur' ] ) {
48- imageBuilder = imageBuilder . blur ( loaderParams [ 'blur' ] ) ;
49- }
50-
51- if ( isPlaceholder ) {
52- imageBuilder = imageBuilder . blur ( 50 ) . quality ( 20 ) ;
53- }
54-
55- return imageBuilder . url ( ) || '' ;
62+ useFactory : ( ) => {
63+ const config = inject ( SANITY_CONFIG , { optional : true } ) ;
64+ return sanityImageLoader ( config ) ;
5665 } ,
5766 } ,
5867 ] ;
0 commit comments