@@ -23,6 +23,8 @@ import {
2323
2424import { useSelect } from '@wordpress/data' ;
2525
26+ import { useRef } from '@wordpress/element' ;
27+
2628/**
2729 * Internal dependencies.
2830 */
@@ -38,6 +40,31 @@ const Compression = ({
3840 isSampleLoading,
3941 setIsSampleLoading
4042} ) => {
43+ const getQuality = value => {
44+ if ( 'number' === typeof value ) {
45+ return value ;
46+ }
47+
48+ if ( 'auto' === value ) {
49+ return 80 ;
50+ }
51+
52+ if ( 'high_c' === value ) {
53+ return 90 ;
54+ }
55+
56+ if ( 'medium_c' === value ) {
57+ return 75 ;
58+ }
59+
60+ if ( 'low_c' === value ) {
61+ return 55 ;
62+ }
63+
64+ return 80 ;
65+ } ;
66+
67+ const manualQualityRef = useRef ( getQuality ( settings . quality ) ) ;
4168 const {
4269 sampleImages,
4370 isLoading
@@ -61,13 +88,36 @@ const Compression = ({
6188 const isBestFormatEnabled = 'disabled' !== settings [ 'best_format' ] ;
6289 const compressionMode = settings [ 'compression_mode' ] ;
6390 const isRetinaEnabled = 'disabled' !== settings [ 'retina_images' ] ;
91+
92+ useEffect ( ( ) => {
93+ if ( isAutoQualityEnabled ) {
94+ return ;
95+ }
96+
97+ manualQualityRef . current = getQuality ( settings . quality ) ;
98+ } , [ isAutoQualityEnabled , settings . quality ] ) ;
6499 const updateOption = ( option , value ) => {
65100 setCanSave ( true ) ;
66101 const data = { ...settings } ;
67102 data [ option ] = value ? 'enabled' : 'disabled' ;
68103 setSettings ( data ) ;
69104 } ;
70105
106+ const handleAutoQualityToggle = value => {
107+ setCanSave ( true ) ;
108+ const data = { ...settings } ;
109+ data . autoquality = value ? 'enabled' : 'disabled' ;
110+ if ( value ) {
111+ manualQualityRef . current = getQuality ( settings . quality ) ;
112+ data . quality = 'mauto' ;
113+ } else {
114+ const manualQuality = manualQualityRef . current ?? getQuality ( settings . quality ) ;
115+ manualQualityRef . current = manualQuality ;
116+ data . quality = manualQuality ;
117+ }
118+ setSettings ( data ) ;
119+ } ;
120+
71121 const loadSample = ( ) => {
72122 setIsSampleLoading ( true ) ;
73123
@@ -80,34 +130,11 @@ const Compression = ({
80130 ) ;
81131 } ;
82132
83- const getQuality = value => {
84- if ( 'number' === typeof value ) {
85- return value ;
86- }
87-
88- if ( 'auto' === value ) {
89- return 90 ;
90- }
91-
92- if ( 'high_c' === value ) {
93- return 90 ;
94- }
95-
96- if ( 'medium_c' === value ) {
97- return 75 ;
98- }
99-
100- if ( 'low_c' === value ) {
101- return 55 ;
102- }
103-
104- return 90 ;
105- } ;
106-
107133 const updateQuality = value => {
108134 setCanSave ( true ) ;
109135 const data = { ...settings } ;
110136 data . quality = value ;
137+ manualQualityRef . current = value ;
111138 setSettings ( data ) ;
112139 } ;
113140
@@ -316,7 +343,7 @@ const Compression = ({
316343 'is-disabled' : isLoading
317344 }
318345 ) }
319- onChange = { value => updateOption ( 'autoquality' , value ) }
346+ onChange = { handleAutoQualityToggle }
320347 />
321348 </ BaseControl >
322349
0 commit comments