From 5e1f88581437734bb90489aa3b38b3816dc9e3d9 Mon Sep 17 00:00:00 2001 From: spyrmpontinis Date: Tue, 23 May 2023 18:07:21 +0300 Subject: [PATCH 1/4] magento2-react-checkout-344 The company field read the configuration from the magento backend --- src/ViewModel/CheckoutConfigProvider.php | 53 +++++++++++-------- .../components/BillingAddressForm.jsx | 20 ++++--- .../BillingAddressFormikProvider.jsx | 6 ++- .../components/ShippingAddressForm.jsx | 20 ++++--- .../ShippingAddressFormikProvider.jsx | 6 ++- src/reactapp/src/utils/rootElement.js | 3 ++ 6 files changed, 68 insertions(+), 40 deletions(-) diff --git a/src/ViewModel/CheckoutConfigProvider.php b/src/ViewModel/CheckoutConfigProvider.php index 6b823335..e70aba59 100644 --- a/src/ViewModel/CheckoutConfigProvider.php +++ b/src/ViewModel/CheckoutConfigProvider.php @@ -4,10 +4,11 @@ namespace Hyva\ReactCheckout\ViewModel; use Magento\Checkout\Model\CompositeConfigProvider; +use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Framework\Serialize\SerializerInterface; use Magento\Framework\View\Element\Block\ArgumentInterface; use Magento\Framework\Locale\ResolverInterface as LocaleResolverInterface; -use Magento\Framework\Event\ManagerInterface as EventManager; +use Magento\Store\Model\ScopeInterface; class CheckoutConfigProvider implements ArgumentInterface { @@ -31,10 +32,11 @@ class CheckoutConfigProvider implements ArgumentInterface */ private $currencyProvider; + /** - * @var EventManager + * @var ScopeConfigInterface */ - private $eventManager; + private $scopeConfig; /** * CheckoutConfigProvider constructor. @@ -42,21 +44,20 @@ class CheckoutConfigProvider implements ArgumentInterface * @param SerializerInterface $serializer * @param LocaleResolverInterface $localeResolver * @param CompositeConfigProvider $compositeConfigProvider - * @param CurrencyProvider $currencyProvider - * @param EventManager $eventManager */ public function __construct( - SerializerInterface $serializer, + SerializerInterface $serializer, LocaleResolverInterface $localeResolver, CompositeConfigProvider $compositeConfigProvider, - CurrencyProvider $currencyProvider, - EventManager $eventManager - ) { + CurrencyProvider $currencyProvider, + ScopeConfigInterface $scopeConfig + ) + { $this->serializer = $serializer; $this->localeResolver = $localeResolver; $this->compositeConfigProvider = $compositeConfigProvider; $this->currencyProvider = $currencyProvider; - $this->eventManager = $eventManager; + $this->scopeConfig = $scopeConfig; } /** @@ -78,19 +79,29 @@ public function getConfig(): string $storeCode = $checkoutConfig['storeCode']; $checkoutConfig['payment']['restUrlPrefix'] = "/rest/$storeCode/V1/"; - $transport = new \Magento\Framework\DataObject([ - 'checkoutConfig' => $checkoutConfig, - 'output' => [ - 'storeCode' => $storeCode, - 'payment' => $checkoutConfig['payment'], - 'language' => $this->localeResolver->getLocale(), - 'currency' => $this->currencyProvider->getConfig(), - 'defaultCountryId' => $checkoutConfig['defaultCountryId'], - ] + return $this->serializer->serialize([ + 'storeCode' => $storeCode, + 'payment' => $checkoutConfig['payment'], + 'language' => $this->localeResolver->getLocale(), + 'currency' => $this->currencyProvider->getConfig(), + 'defaultCountryId' => $checkoutConfig['defaultCountryId'], + 'address' => $this->getAddressConfig() ]); + } - $this->eventManager->dispatch('hyva_react_checkout_config', ['transport' => $transport]); + private function getAddressConfig() + { - return $this->serializer->serialize($transport->getData('output')); + return [ + 'company' => $this->getValue("customer/address/company_show") + ]; + } + + public function getValue($field, $storeId = null) + { + return $this->scopeConfig->getValue($field, + ScopeInterface::SCOPE_STORE, + $storeId + ); } } diff --git a/src/reactapp/src/components/billingAddress/components/BillingAddressForm.jsx b/src/reactapp/src/components/billingAddress/components/BillingAddressForm.jsx index 664c8a32..8a21f0da 100644 --- a/src/reactapp/src/components/billingAddress/components/BillingAddressForm.jsx +++ b/src/reactapp/src/components/billingAddress/components/BillingAddressForm.jsx @@ -14,6 +14,7 @@ import useAddressWrapper from '../../address/hooks/useAddressWrapper'; import useBillingAddressAppContext from '../hooks/useBillingAddressAppContext'; import useFormValidateThenSubmit from '../../../hook/useFormValidateThenSubmit'; import useBillingAddressFormikContext from '../hooks/useBillingAddressFormikContext'; +import RootElement from '../../../utils/rootElement'; function BillingAddressForm() { const { @@ -32,6 +33,7 @@ function BillingAddressForm() { validationSchema, setSelectedAddress, } = useBillingAddressFormikContext(); + const config = RootElement.getAddressConfig(); const { isLoggedIn } = useBillingAddressAppContext(); const { reCalculateMostRecentAddressOptions } = useAddressWrapper(); const formSubmitHandler = useFormValidateThenSubmit({ @@ -97,14 +99,16 @@ function BillingAddressForm() { return ( <>
- + {config.company && ( + + )}
- + {config.company && ( + + )} Date: Tue, 23 May 2023 19:12:33 +0300 Subject: [PATCH 2/4] magento2-react-checkout-344 adding nullable when it is not required --- .../billingAddress/components/BillingAddressFormikProvider.jsx | 2 +- .../components/ShippingAddressFormikProvider.jsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/reactapp/src/components/billingAddress/components/BillingAddressFormikProvider.jsx b/src/reactapp/src/components/billingAddress/components/BillingAddressFormikProvider.jsx index d276c653..7fcba624 100644 --- a/src/reactapp/src/components/billingAddress/components/BillingAddressFormikProvider.jsx +++ b/src/reactapp/src/components/billingAddress/components/BillingAddressFormikProvider.jsx @@ -33,7 +33,7 @@ const config = RootElement.getAddressConfig(); const requireCompany = config.company === 'req'; const initValidationSchema = { - company: requireCompany ? YupString().required(requiredMessage) : YupString().notRequired(), + company: requireCompany ? YupString().required(requiredMessage) : YupString().notRequired().nullable(), firstname: YupString().required(requiredMessage), lastname: YupString().required(requiredMessage), street: YupArray().test( diff --git a/src/reactapp/src/components/shippingAddress/components/ShippingAddressFormikProvider.jsx b/src/reactapp/src/components/shippingAddress/components/ShippingAddressFormikProvider.jsx index aac8e71e..d3de9c41 100644 --- a/src/reactapp/src/components/shippingAddress/components/ShippingAddressFormikProvider.jsx +++ b/src/reactapp/src/components/shippingAddress/components/ShippingAddressFormikProvider.jsx @@ -50,7 +50,7 @@ const requiredMessage = __('%1 is required'); const config = RootElement.getAddressConfig(); const requireCompany = config.company === 'req'; const initValidationSchema = { - company: requireCompany ? YupString().required(requiredMessage) : YupString().notRequired(), + company: requireCompany ? YupString().required(requiredMessage) : YupString().notRequired().nullable(), firstname: YupString().required(requiredMessage), lastname: YupString().required(requiredMessage), street: YupArray().test( From f386d05d0cd541f2e45a6efc53fac11a41598e99 Mon Sep 17 00:00:00 2001 From: spyrmpontinis Date: Wed, 24 May 2023 13:48:35 +0300 Subject: [PATCH 3/4] magento2-react-checkout-344 adding event manager logic --- src/ViewModel/CheckoutConfigProvider.php | 35 ++++++++++++++++++------ 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/src/ViewModel/CheckoutConfigProvider.php b/src/ViewModel/CheckoutConfigProvider.php index e70aba59..2dcf7dd8 100644 --- a/src/ViewModel/CheckoutConfigProvider.php +++ b/src/ViewModel/CheckoutConfigProvider.php @@ -3,12 +3,15 @@ namespace Hyva\ReactCheckout\ViewModel; +use Couchbase\Scope; use Magento\Checkout\Model\CompositeConfigProvider; use Magento\Framework\App\Config\ScopeConfigInterface; +use Magento\Framework\DataObject; use Magento\Framework\Serialize\SerializerInterface; use Magento\Framework\View\Element\Block\ArgumentInterface; use Magento\Framework\Locale\ResolverInterface as LocaleResolverInterface; use Magento\Store\Model\ScopeInterface; +use Magento\Framework\Event\ManagerInterface as EventManager; class CheckoutConfigProvider implements ArgumentInterface { @@ -38,19 +41,29 @@ class CheckoutConfigProvider implements ArgumentInterface */ private $scopeConfig; + + /** + * @var EventManager + */ + + private $eventManager; + /** * CheckoutConfigProvider constructor. * * @param SerializerInterface $serializer * @param LocaleResolverInterface $localeResolver * @param CompositeConfigProvider $compositeConfigProvider + * @param ScopeConfigInterface $scopeConfig + * @param EventManager $eventManager */ public function __construct( SerializerInterface $serializer, LocaleResolverInterface $localeResolver, CompositeConfigProvider $compositeConfigProvider, CurrencyProvider $currencyProvider, - ScopeConfigInterface $scopeConfig + ScopeConfigInterface $scopeConfig, + EventManager $eventManager ) { $this->serializer = $serializer; @@ -58,6 +71,7 @@ public function __construct( $this->compositeConfigProvider = $compositeConfigProvider; $this->currencyProvider = $currencyProvider; $this->scopeConfig = $scopeConfig; + $this->eventManager = $eventManager; } /** @@ -79,14 +93,19 @@ public function getConfig(): string $storeCode = $checkoutConfig['storeCode']; $checkoutConfig['payment']['restUrlPrefix'] = "/rest/$storeCode/V1/"; - return $this->serializer->serialize([ - 'storeCode' => $storeCode, - 'payment' => $checkoutConfig['payment'], - 'language' => $this->localeResolver->getLocale(), - 'currency' => $this->currencyProvider->getConfig(), - 'defaultCountryId' => $checkoutConfig['defaultCountryId'], - 'address' => $this->getAddressConfig() + $transport = new DataObject([ + 'checkoutConfig' => $checkoutConfig, + 'output' => [ + 'storeCode' => $storeCode, + 'payment' => $checkoutConfig['payment'], + 'language' => $this->localeResolver->getLocale(), + 'currency' => $this->currencyProvider->getConfig(), + 'defaultCountryId' => $checkoutConfig['defaultCountryId'], + 'address' => $this->getAddressConfig() + ] ]); + $this->eventManager->dispatch('hyva_react_checkout_config', ['transport' => $transport]); + return $this->serializer->serialize($transport->getData('output')); } private function getAddressConfig() From 23ddd55e4b11abefcbdff13964dd1c549b5c6be8 Mon Sep 17 00:00:00 2001 From: spyrmpontinis Date: Wed, 24 May 2023 13:49:49 +0300 Subject: [PATCH 4/4] magento2-react-checkout-344 cleaning unused imports --- src/ViewModel/CheckoutConfigProvider.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/ViewModel/CheckoutConfigProvider.php b/src/ViewModel/CheckoutConfigProvider.php index 2dcf7dd8..43686bf7 100644 --- a/src/ViewModel/CheckoutConfigProvider.php +++ b/src/ViewModel/CheckoutConfigProvider.php @@ -3,7 +3,6 @@ namespace Hyva\ReactCheckout\ViewModel; -use Couchbase\Scope; use Magento\Checkout\Model\CompositeConfigProvider; use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Framework\DataObject;