Skip to content

Commit cf26824

Browse files
committed
Add support number quality on Image Component
1 parent 9c65c99 commit cf26824

File tree

2 files changed

+23
-11
lines changed

2 files changed

+23
-11
lines changed

packages/next/client/image.tsx

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ type ImageProps = Omit<
2525
'src' | 'srcSet' | 'ref' | 'width' | 'height' | 'loading'
2626
> & {
2727
src: string
28-
quality?: string
28+
quality?: number | string
2929
priority?: boolean
3030
loading?: LoadingValue
3131
unoptimized?: boolean
@@ -83,7 +83,7 @@ function getObserver(): IntersectionObserver | undefined {
8383
function computeSrc(
8484
src: string,
8585
unoptimized: boolean,
86-
quality?: string
86+
quality?: number
8787
): string {
8888
if (unoptimized) {
8989
return src
@@ -94,7 +94,7 @@ function computeSrc(
9494
type CallLoaderProps = {
9595
src: string
9696
width: number
97-
quality?: string
97+
quality?: number
9898
}
9999

100100
function callLoader(loaderProps: CallLoaderProps) {
@@ -105,7 +105,7 @@ function callLoader(loaderProps: CallLoaderProps) {
105105
type SrcSetData = {
106106
src: string
107107
widths: number[]
108-
quality?: string
108+
quality?: number
109109
}
110110

111111
function generateSrcSet({ src, widths, quality }: SrcSetData): string {
@@ -121,7 +121,7 @@ type PreloadData = {
121121
widths: number[]
122122
sizes?: string
123123
unoptimized?: boolean
124-
quality?: string
124+
quality?: number
125125
}
126126

127127
function generatePreload({
@@ -200,13 +200,15 @@ export default function Image({
200200
}
201201
}, [thisEl, lazy])
202202

203+
const parsedQuality = parseInt(quality as string, 10)
204+
203205
// Generate attribute values
204-
const imgSrc = computeSrc(src, unoptimized, quality)
206+
const imgSrc = computeSrc(src, unoptimized, parsedQuality)
205207
const imgSrcSet = !unoptimized
206208
? generateSrcSet({
207209
src,
208210
widths: configSizes,
209-
quality,
211+
quality: parsedQuality,
210212
})
211213
: undefined
212214

@@ -301,7 +303,7 @@ export default function Image({
301303
widths: configSizes,
302304
unoptimized,
303305
sizes,
304-
quality,
306+
quality: parsedQuality,
305307
})
306308
: ''}
307309
<img
@@ -391,7 +393,5 @@ function defaultLoader({ root, src, width, quality }: LoaderProps): string {
391393
}
392394
}
393395

394-
return `${root}?url=${encodeURIComponent(src)}&w=${width}&q=${
395-
quality || '100'
396-
}`
396+
return `${root}?url=${encodeURIComponent(src)}&w=${width}&q=${quality || 100}`
397397
}

test/integration/image-component/typescript/pages/valid.tsx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,18 @@ const Page = () => {
2222
src="https://via.placeholder.com/100"
2323
unsized
2424
></Image>
25+
<Image
26+
id="quality-num"
27+
src="https://via.placeholder.com/500"
28+
quality={80}
29+
unsized
30+
></Image>
31+
<Image
32+
id="quality-str"
33+
src="https://via.placeholder.com/500"
34+
quality="80"
35+
unsized
36+
></Image>
2537
<p id="stubtext">This is valid usage of the Image component</p>
2638
</div>
2739
)

0 commit comments

Comments
 (0)