♻️ Simplify Redux controllers

This commit is contained in:
Philipp Stracker 2024-12-17 15:05:34 +01:00
parent 11599102f4
commit a77b209e3e
No known key found for this signature in database
2 changed files with 21 additions and 43 deletions

View file

@ -187,7 +187,13 @@ export const connectViaIdAndSecret = function* () {
* @return {Action} The action. * @return {Action} The action.
*/ */
export const refreshMerchantData = function* () { export const refreshMerchantData = function* () {
return yield { type: ACTION_TYPES.DO_REFRESH_MERCHANT }; const result = yield { type: ACTION_TYPES.DO_REFRESH_MERCHANT };
if ( result.success && result.merchant ) {
yield hydrate( result );
}
return result;
}; };
/** /**
@ -201,7 +207,9 @@ export const refreshFeatureStatuses = function* () {
const result = yield { type: ACTION_TYPES.DO_REFRESH_FEATURES }; const result = yield { type: ACTION_TYPES.DO_REFRESH_FEATURES };
if ( result && result.success ) { if ( result && result.success ) {
return yield dispatch( STORE_NAME ).refreshMerchantData(); // TODO: Review if we can get the updated feature details in the result.data instead of
// doing a second refreshMerchantData() request.
yield refreshMerchantData();
} }
return result; return result;

View file

@ -7,11 +7,9 @@
* @file * @file
*/ */
import { dispatch } from '@wordpress/data';
import apiFetch from '@wordpress/api-fetch'; import apiFetch from '@wordpress/api-fetch';
import { import {
STORE_NAME,
REST_PERSIST_PATH, REST_PERSIST_PATH,
REST_MANUAL_CONNECTION_PATH, REST_MANUAL_CONNECTION_PATH,
REST_CONNECTION_URL_PATH, REST_CONNECTION_URL_PATH,
@ -23,7 +21,7 @@ import ACTION_TYPES from './action-types';
export const controls = { export const controls = {
async [ ACTION_TYPES.DO_PERSIST_DATA ]( { data } ) { async [ ACTION_TYPES.DO_PERSIST_DATA ]( { data } ) {
try { try {
return await apiFetch( { await apiFetch( {
path: REST_PERSIST_PATH, path: REST_PERSIST_PATH,
method: 'POST', method: 'POST',
data, data,
@ -34,10 +32,8 @@ export const controls = {
}, },
async [ ACTION_TYPES.DO_SANDBOX_LOGIN ]() { async [ ACTION_TYPES.DO_SANDBOX_LOGIN ]() {
let result = null;
try { try {
result = await apiFetch( { return apiFetch( {
path: REST_CONNECTION_URL_PATH, path: REST_CONNECTION_URL_PATH,
method: 'POST', method: 'POST',
data: { data: {
@ -46,20 +42,16 @@ export const controls = {
}, },
} ); } );
} catch ( e ) { } catch ( e ) {
result = { return {
success: false, success: false,
error: e, error: e,
}; };
} }
return result;
}, },
async [ ACTION_TYPES.DO_PRODUCTION_LOGIN ]( { products } ) { async [ ACTION_TYPES.DO_PRODUCTION_LOGIN ]( { products } ) {
let result = null;
try { try {
result = await apiFetch( { return apiFetch( {
path: REST_CONNECTION_URL_PATH, path: REST_CONNECTION_URL_PATH,
method: 'POST', method: 'POST',
data: { data: {
@ -68,13 +60,11 @@ export const controls = {
}, },
} ); } );
} catch ( e ) { } catch ( e ) {
result = { return {
success: false, success: false,
error: e, error: e,
}; };
} }
return result;
}, },
async [ ACTION_TYPES.DO_MANUAL_CONNECTION ]( { async [ ACTION_TYPES.DO_MANUAL_CONNECTION ]( {
@ -82,10 +72,8 @@ export const controls = {
clientSecret, clientSecret,
useSandbox, useSandbox,
} ) { } ) {
let result = null;
try { try {
result = await apiFetch( { return await apiFetch( {
path: REST_MANUAL_CONNECTION_PATH, path: REST_MANUAL_CONNECTION_PATH,
method: 'POST', method: 'POST',
data: { data: {
@ -95,54 +83,36 @@ export const controls = {
}, },
} ); } );
} catch ( e ) { } catch ( e ) {
result = { return {
success: false, success: false,
error: e, error: e,
}; };
} }
return result;
}, },
async [ ACTION_TYPES.DO_REFRESH_MERCHANT ]() { async [ ACTION_TYPES.DO_REFRESH_MERCHANT ]() {
let result = null;
try { try {
result = await apiFetch( { path: REST_HYDRATE_MERCHANT_PATH } ); return await apiFetch( { path: REST_HYDRATE_MERCHANT_PATH } );
if ( result.success && result.merchant ) {
await dispatch( STORE_NAME ).hydrate( result );
}
} catch ( e ) { } catch ( e ) {
result = { return {
success: false, success: false,
error: e, error: e,
}; };
} }
return result;
}, },
async [ ACTION_TYPES.DO_REFRESH_FEATURES ]() { async [ ACTION_TYPES.DO_REFRESH_FEATURES ]() {
let result = null;
try { try {
result = await apiFetch( { return await apiFetch( {
path: REST_REFRESH_FEATURES_PATH, path: REST_REFRESH_FEATURES_PATH,
method: 'POST', method: 'POST',
} ); } );
if ( result.success ) {
result = await dispatch( STORE_NAME ).refreshMerchantData();
}
} catch ( e ) { } catch ( e ) {
result = { return {
success: false, success: false,
error: e, error: e,
message: e.message, message: e.message,
}; };
} }
return result;
}, },
}; };