File "actions.js"
Full Path: /home/siazco/grocery.siazco.se/wp-content/plugins/better-wp-security/core/packages/data/src/patchstack/actions.js
File size: 2.45 KB
MIME-type: text/x-java
Charset: utf-8
/**
* External dependencies
*/
/**
* WordPress dependencies
*/
import { addQueryArgs, getQueryArg } from '@wordpress/url';
import { controls } from '@wordpress/data';
/**
* Internal dependencies
*/
import { fetch, parseFetchResponse } from '../controls.js';
import { path, STORE_NAME } from './constant.js';
export function* query( queryId, queryParams = {} ) {
let response, items;
yield { type: START_QUERY, queryId, queryParams };
queryParams.per_page = queryParams.per_page || 100;
queryParams.page = queryParams.page || 1;
try {
response = yield fetch( addQueryArgs( path + '/db', queryParams ), {
credentials: 'omit',
} );
if ( response.ok ) {
items = yield parseFetchResponse( response );
} else {
throw yield parseFetchResponse( response );
}
} catch ( error ) {
yield { type: FAILED_QUERY, queryId, queryParams, error };
return error;
}
yield receiveQuery(
queryId,
queryParams.context || 'view',
response,
items,
'replace'
);
yield { type: FINISH_QUERY, queryId, queryParams, response };
return response;
}
export function* refreshQuery( queryId ) {
const queryParams = yield controls.select( STORE_NAME, 'getQueryParams', queryId );
yield* query( queryId, queryParams );
}
export function* fetchQueryPrevPage( queryId, mode = 'append' ) {
return yield * fetchQueryLink( queryId, 'prev', mode );
}
export function* fetchQueryNextPage( queryId, mode = 'append' ) {
return yield * fetchQueryLink( queryId, 'next', mode );
}
function* fetchQueryLink( queryId, rel, mode ) {
const link = yield controls.select(
STORE_NAME,
'getQueryHeaderLink',
queryId,
rel
);
if ( ! link ) {
return [];
}
let response, items;
yield { type: START_QUERY, queryId };
try {
response = yield fetch( path + link.link, {
credentials: 'omit',
} );
items = yield parseFetchResponse( response );
} catch ( error ) {
yield { type: FAILED_QUERY, queryId, error };
return error;
}
const context = getQueryArg( link.link, 'context' ) || 'view';
yield receiveQuery( queryId, context, response, items, mode );
yield { type: FINISH_QUERY, queryId, response };
return response;
}
export function receiveQuery( queryId, context, response, items, mode ) {
return {
type: RECEIVE_QUERY,
queryId,
context,
response,
items,
mode,
};
}
export const START_QUERY = 'START_QUERY';
export const FINISH_QUERY = 'FINISH_QUERY';
export const FAILED_QUERY = 'FAILED_QUERY';
export const RECEIVE_QUERY = 'RECEIVE_QUERY';