# image-optimization/1.7.4/modules/reviews/assets/src/hooks/use-storage.js

Image Optimizer – Compress Images and Convert to WebP or AVIF, version 1.7.4. 48 lines.

- Page: https://pluginprobe.com/plugins/image-optimization/1.7.4/code/modules/reviews/assets/src/hooks/use-storage.js
- Raw: https://pluginprobe.com/plugins/image-optimization/1.7.4/raw/modules/reviews/assets/src/hooks/use-storage.js
- Modified: 2025-09-11T08:55:06+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/image-optimization/1.7.4/code/modules/reviews/assets/src/hooks/use-storage.js#L10-L20`.

```javascript
import { store as coreDataStore } from '@wordpress/core-data';
import { dispatch, useSelect } from '@wordpress/data';

const useStorage = () => {
	const save = async ( data ) => {
		try {
			return await dispatch( coreDataStore ).saveEntityRecord( 'root', 'site', data );
		} catch ( error ) {
			console.error( 'Storage save error:', error );
			return Promise.resolve();
		}
	};

	// Fetch site data with useSelect and check resolution status
	const get = useSelect(
		( select ) => {
			try {
				const coreDataSelect = select( coreDataStore );
				if ( ! coreDataSelect ) {
					return {
						data: { image_optimizer_review_data: {} },
						hasFinishedResolution: true,
					};
				}

				return {
					data: coreDataSelect.getEntityRecord( 'root', 'site' ) || { image_optimizer_review_data: {} },
					hasFinishedResolution: coreDataSelect.hasFinishedResolution( 'getEntityRecord', [ 'root', 'site' ] ),
				};
			} catch ( error ) {
				console.error( 'Storage get error:', error );
				return {
					data: { image_optimizer_review_data: {} },
					hasFinishedResolution: true,
				};
			}
		},
		[],
	);

	return {
		save,
		get,
	};
};

export default useStorage;

```
