From 838fd6a1a041ad6f958a3ce152324f0515c5fce5 Mon Sep 17 00:00:00 2001
From: Philipp Stracker
Date: Fri, 14 Feb 2025 17:45:05 +0100
Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Apply=20new=20hook-pattern?=
=?UTF-8?q?=20to=20payment=20store?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../resources/js/data/payment/hooks.js | 54 +++++++++++++------
1 file changed, 37 insertions(+), 17 deletions(-)
diff --git a/modules/ppcp-settings/resources/js/data/payment/hooks.js b/modules/ppcp-settings/resources/js/data/payment/hooks.js
index 253710580..7cbd81382 100644
--- a/modules/ppcp-settings/resources/js/data/payment/hooks.js
+++ b/modules/ppcp-settings/resources/js/data/payment/hooks.js
@@ -7,21 +7,38 @@
* @file
*/
-import { useDispatch } from '@wordpress/data';
+import { useDispatch, useSelect } from '@wordpress/data';
import { STORE_NAME } from './constants';
import { createHooksForStore } from '../utils';
+import { useMemo } from '@wordpress/element';
+
+/**
+ * Single source of truth for access Redux details.
+ *
+ * This hook returns a stable API to access actions, selectors and special hooks to generate
+ * getter- and setters for transient or persistent properties.
+ *
+ * @return {{select, dispatch, useTransient, usePersistent}} Store data API.
+ */
+const useStoreData = () => {
+ const select = useSelect( ( selectors ) => selectors( STORE_NAME ), [] );
+ const dispatch = useDispatch( STORE_NAME );
+ const { useTransient, usePersistent } = createHooksForStore( STORE_NAME );
+
+ return useMemo(
+ () => ( {
+ select,
+ dispatch,
+ useTransient,
+ usePersistent,
+ } ),
+ [ select, dispatch, useTransient, usePersistent ]
+ );
+};
const useHooks = () => {
- const { useTransient, usePersistent } = createHooksForStore( STORE_NAME );
- const { persist, setPersistent, changePaymentSettings } =
- useDispatch( STORE_NAME );
-
- // Read-only flags and derived state.
- // Nothing here yet.
-
- // Transient accessors.
- const [ isReady ] = useTransient( 'isReady' );
+ const { usePersistent } = useStoreData();
// PayPal checkout.
const [ paypal ] = usePersistent( 'ppcp-gateway' );
@@ -58,10 +75,6 @@ const useHooks = () => {
);
return {
- persist,
- isReady,
- setPersistent,
- changePaymentSettings,
paypal,
venmo,
payLater,
@@ -88,9 +101,16 @@ const useHooks = () => {
};
export const useStore = () => {
- const { persist, isReady, setPersistent, changePaymentSettings } =
- useHooks();
- return { persist, isReady, setPersistent, changePaymentSettings };
+ const { useTransient, dispatch } = useStoreData();
+ const { persist, setPersistent, changePaymentSettings } = dispatch;
+ const [ isReady ] = useTransient( 'isReady' );
+
+ return {
+ persist,
+ setPersistent,
+ changePaymentSettings,
+ isReady,
+ };
};
export const usePaymentMethods = () => {