@woocommerce/data
Version:
WooCommerce Admin data store and utilities
42 lines (41 loc) • 1.4 kB
JavaScript
/**
* External dependencies
*/
import { apiFetch, dispatch as depreciatedDispatch, } from '@wordpress/data-controls';
import { controls } from '@wordpress/data';
/**
* Internal dependencies
*/
import { NAMESPACE } from '../constants';
import { STORE_NAME } from './constants';
import { updateSettingsForGroup, updateErrorForGroup } from './actions';
import { isRestApiError } from '../types';
// Can be removed in WP 5.9.
const dispatch = controls && controls.dispatch ? controls.dispatch : depreciatedDispatch;
function settingsToSettingsResource(settings) {
return settings.reduce((resource, setting) => {
resource[setting.id] = setting.value;
return resource;
}, {});
}
export function* getSettings(group) {
yield dispatch(STORE_NAME, 'setIsRequesting', group, true);
try {
const url = NAMESPACE + '/settings/' + group;
const results = yield apiFetch({
path: url,
method: 'GET',
});
const resource = settingsToSettingsResource(results);
return updateSettingsForGroup(group, { [group]: resource });
}
catch (error) {
if (error instanceof Error || isRestApiError(error)) {
return updateErrorForGroup(group, null, error.message);
}
throw `Unexpected error ${error}`;
}
}
export function* getSettingsForGroup(group) {
return getSettings(group);
}