Skip to content

Commit d78fc4e

Browse files
refactor(app): Changed the models for ResponsiveImage and RetinaImage to allow for more flexible ima
Previously the keys for the ResponsiveImage object were the string representations of the breakpoint sizes. This meant that any GraphQL server providing that image object would need to be aware of those keys in order to provide an appropriate object. With the strings abstracted into a sizes property, and retina images seperated from palceholder and dummy, the responsiveImage object is more flexible. BREAKING CHANGE: sn-image-loader component now expects a differently structured responsiveImage object.
1 parent 7735de0 commit d78fc4e

File tree

4 files changed

+45
-38
lines changed

4 files changed

+45
-38
lines changed

src/app/app.component.ts

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,23 @@ export class AppComponent {
1717
image: ResponsiveImage = {
1818
placeholder: 'http://via.placeholder.com/35x15?text=placeholder',
1919
fallback: 'http://via.placeholder.com/350x150?text=fallback',
20-
xs: {
21-
'@1x': 'http://via.placeholder.com/150x350?text=xs+1x',
22-
'@2x': 'http://via.placeholder.com/300x700?text=xs+2x'
23-
},
24-
md: {
25-
'@1x': 'http://via.placeholder.com/350x250?text=md+1x',
26-
'@2x': 'http://via.placeholder.com/700x500?text=md+2x'
27-
},
28-
lg: {
29-
'@1x': 'http://via.placeholder.com/700x400?text=lg+1x',
30-
'@2x': 'http://via.placeholder.com/1400x800?text=lg+2x'
31-
}
20+
images: [
21+
{
22+
size: 'xs',
23+
x1: 'http://via.placeholder.com/150x350?text=xs+1x',
24+
x2: 'http://via.placeholder.com/300x700?text=xs+2x'
25+
},
26+
{
27+
size: 'md',
28+
x1: 'http://via.placeholder.com/350x250?text=md+1x',
29+
x2: 'http://via.placeholder.com/700x500?text=md+2x'
30+
},
31+
{
32+
size: 'lg',
33+
x1: 'http://via.placeholder.com/700x400?text=lg+1x',
34+
x2: 'http://via.placeholder.com/1400x800?text=lg+2x'
35+
}
36+
]
3237
};
3338

3439
/**

src/app/image-loader/image-loader.component.spec.ts

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,23 @@ describe('ImageLoaderComponent', () => {
2424
const image: ResponsiveImage = {
2525
placeholder: 'http://via.placeholder.com/35x15?text=placeholder',
2626
fallback: 'http://via.placeholder.com/350x150?text=fallback',
27-
xs: {
28-
'@1x': 'http://via.placeholder.com/150x350?text=xs+1x',
29-
'@2x': 'http://via.placeholder.com/300x700?text=xs+2x'
30-
},
31-
md: {
32-
'@1x': 'http://via.placeholder.com/350x250?text=md+1x',
33-
'@2x': 'http://via.placeholder.com/700x500?text=md+2x'
34-
},
35-
lg: {
36-
'@1x': 'http://via.placeholder.com/700x400?text=lg+1x',
37-
'@2x': 'http://via.placeholder.com/1400x800?text=lg+2x'
38-
}
27+
images: [
28+
{
29+
size: 'xs',
30+
x1: 'http://via.placeholder.com/150x350?text=xs+1x',
31+
x2: 'http://via.placeholder.com/300x700?text=xs+2x'
32+
},
33+
{
34+
size: 'md',
35+
x1: 'http://via.placeholder.com/350x250?text=md+1x',
36+
x2: 'http://via.placeholder.com/700x500?text=md+2x'
37+
},
38+
{
39+
size: 'lg',
40+
x1: 'http://via.placeholder.com/700x400?text=lg+1x',
41+
x2: 'http://via.placeholder.com/1400x800?text=lg+2x'
42+
}
43+
]
3944
};
4045

4146
beforeEach(async(() => {

src/app/image-loader/image-loader.component.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import 'rxjs/add/operator/debounceTime';
1717

1818
import * as classes from './shared/classes';
1919
import * as events from './shared/events';
20-
import { ImageLoadedEvent, ResponsiveImage, RetinaImage, Size, Breakpoint, Retina } from './shared';
20+
import { ImageLoadedEvent, ResponsiveImage, RetinaImage, Size, Breakpoint } from './shared';
2121
import { WindowRef } from '@thisissoon/angular-inviewport';
2222

2323
/**
@@ -272,8 +272,9 @@ export class ImageLoaderComponent implements OnInit, AfterViewInit, OnDestroy {
272272
*/
273273
public preloadImage(): void {
274274
if (this.inViewport && this.notLoaded) {
275-
const imageNormal = this.image[this.size]['@1x'];
276-
const imageRetina = this.image[this.size]['@2x'];
275+
const retinaImg = this.image.images.filter(retinaImage => retinaImage.size === this.size)[0];
276+
const imageNormal = retinaImg.x1;
277+
const imageRetina = retinaImg.x2;
277278
this.supportsSrcSet ?
278279
this.preloadSrcset = `${imageNormal} 1x, ${imageRetina} 2x` :
279280
this.preloadSrc = `${imageNormal}`;
@@ -286,8 +287,9 @@ export class ImageLoaderComponent implements OnInit, AfterViewInit, OnDestroy {
286287
* @memberof ImageLoaderComponent
287288
*/
288289
public onImagePreload(): void {
289-
const imageNormal = this.image[this.size]['@1x'];
290-
const imageRetina = this.image[this.size]['@2x'];
290+
const retinaImg = this.image.images.filter(retinaImage => retinaImage.size === this.size)[0];
291+
const imageNormal = retinaImg.x1;
292+
const imageRetina = retinaImg.x2;
291293
this.supportsSrcSet ?
292294
this.srcset = `${imageNormal} 1x, ${imageRetina} 2x` :
293295
this.src = this.preloadSrc;

src/app/image-loader/shared/image.model.ts

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,17 @@
11
export interface ResponsiveImage {
2-
xs?: RetinaImage;
3-
sm?: RetinaImage;
4-
md?: RetinaImage;
5-
lg?: RetinaImage;
6-
xl?: RetinaImage;
72
placeholder: string;
83
fallback: string;
4+
images: RetinaImage[];
95
}
106

117
export interface RetinaImage {
12-
'@1x'?: string;
13-
'@2x'?: string;
8+
size: Size;
9+
x1?: string;
10+
x2?: string;
1411
}
1512

1613
export type Size = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
1714

18-
export type Retina = '@1x' | '@2x';
19-
2015
export interface Breakpoint {
2116
size: Size;
2217
width: number;

0 commit comments

Comments
 (0)