diff --git a/vendor/magento/module-persistent/Block/Header/RememberMeInit.php b/vendor/magento/module-persistent/Block/Header/RememberMeInit.php new file mode 100644 index 0000000000000..e0601ddc76c6a --- /dev/null +++ b/vendor/magento/module-persistent/Block/Header/RememberMeInit.php @@ -0,0 +1,64 @@ +serializer = $serializer ?: ObjectManager::getInstance() + ->get(JsonHexTag::class); + $this->checkoutConfigProvider = $checkoutConfigProvider ?: ObjectManager::getInstance() + ->get(CheckoutConfigProvider::class); + } + + /** + * Retrieve serialized config. + * + * @return string|bool + */ + private function getSerializedCheckoutConfig(): string|bool + { + return $this->serializer->serialize($this->checkoutConfigProvider->getConfig()); + } + + /** + * @inheritDoc + */ + public function toHtml() + { + $html = parent::toHtml(); + $serializedConfig = $this->getSerializedCheckoutConfig(); + $jsString = ''; + + $html .= $jsString; + return $html; + } +} diff --git a/vendor/magento/module-persistent/Observer/AddPersistentRememberMeInitObserver.php b/vendor/magento/module-persistent/Observer/AddPersistentRememberMeInitObserver.php new file mode 100644 index 0000000000000..b9e9f3adb75ad --- /dev/null +++ b/vendor/magento/module-persistent/Observer/AddPersistentRememberMeInitObserver.php @@ -0,0 +1,53 @@ +customerSession->isLoggedIn() + || !$this->persistentData->isEnabled() + || !$this->persistentData->isRememberMeEnabled() + ) { + return $this; + } + + /** @var \Magento\Framework\View\Layout $layout */ + $layout = $observer->getEvent()->getData('layout'); + $layout->getUpdate()->addHandle('remember_me'); + return $this; + } +} diff --git a/vendor/magento/module-persistent/Plugin/AddPersistentRememberMeInitPlugin.php b/vendor/magento/module-persistent/Plugin/AddPersistentRememberMeInitPlugin.php new file mode 100644 index 0000000000000..63d746ca266a0 --- /dev/null +++ b/vendor/magento/module-persistent/Plugin/AddPersistentRememberMeInitPlugin.php @@ -0,0 +1,57 @@ +customerSession->isLoggedIn() + && $this->persistentData->isEnabled() + && $this->persistentData->isRememberMeEnabled() + ) { + if ($subject->getBlock('head.additional') && + !$subject->getBlock('persistent_initial_configs')) { + $subject->addBlock( + RememberMeInit::class, + 'persistent_initial_configs' + ); + $subject->addOutputElement('persistent_initial_configs'); + } + } + } +} diff --git a/vendor/magento/module-persistent/etc/frontend/di.xml b/vendor/magento/module-persistent/etc/frontend/di.xml index 498b59b7e4c45..7f7de75a449f6 100644 --- a/vendor/magento/module-persistent/etc/frontend/di.xml +++ b/vendor/magento/module-persistent/etc/frontend/di.xml @@ -1,8 +1,8 @@ @@ -18,6 +18,7 @@ type="Magento\Persistent\Model\Layout\DepersonalizePlugin" sortOrder="10" /> + diff --git a/vendor/magento/module-persistent/etc/frontend/events.xml b/vendor/magento/module-persistent/etc/frontend/events.xml index 1241a1bc4780d..73c24078a8041 100644 --- a/vendor/magento/module-persistent/etc/frontend/events.xml +++ b/vendor/magento/module-persistent/etc/frontend/events.xml @@ -1,9 +1,9 @@ @@ -25,8 +25,12 @@ + + + + diff --git a/vendor/magento/module-persistent/view/frontend/layout/checkout_index_index.xml b/vendor/magento/module-persistent/view/frontend/layout/checkout_index_index.xml new file mode 100644 index 0000000000000..4cdf6f1174550 --- /dev/null +++ b/vendor/magento/module-persistent/view/frontend/layout/checkout_index_index.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + Magento_Persistent/js/view/remember-me + additional-login-form-fields + + + + + + + + + + + + + + + Magento_Persistent/js/view/remember-me + additional-login-form-fields + + + + + + + + + + + + + + + + + + + diff --git a/vendor/magento/module-persistent/view/frontend/layout/remember_me.xml b/vendor/magento/module-persistent/view/frontend/layout/remember_me.xml new file mode 100644 index 0000000000000..aff54047db797 --- /dev/null +++ b/vendor/magento/module-persistent/view/frontend/layout/remember_me.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + Magento_Persistent/js/view/remember-me-default + additional-login-form-fields + + + + + + + + + diff --git a/vendor/magento/module-persistent/view/frontend/web/js/remember-me-config.js b/vendor/magento/module-persistent/view/frontend/web/js/remember-me-config.js new file mode 100644 index 0000000000000..3961f1110de9b --- /dev/null +++ b/vendor/magento/module-persistent/view/frontend/web/js/remember-me-config.js @@ -0,0 +1,26 @@ +/** + * Copyright 2024 Adobe + * All Rights Reserved. + */ + +define( + [ + 'ko', + 'uiComponent' + ], + function (ko, Component) { + 'use strict'; + + return Component.extend({ + dataScope: 'global', + config: {}, + + /** @inheritdoc */ + initialize: function () { + this._super(); + + window.rememberMeConfig = this.config; + } + }); + } +); diff --git a/vendor/magento/module-persistent/view/frontend/web/js/view/remember-me-default.js b/vendor/magento/module-persistent/view/frontend/web/js/view/remember-me-default.js new file mode 100644 index 0000000000000..5a91f451cb5bf --- /dev/null +++ b/vendor/magento/module-persistent/view/frontend/web/js/view/remember-me-default.js @@ -0,0 +1,52 @@ +/** + * Copyright 2024 Adobe + * All Rights Reserved. + */ + +define( + [ + 'ko', + 'uiComponent', + 'Magento_Customer/js/customer-data' + ], + function (ko, Component, customerData) { + 'use strict'; + + return Component.extend({ + defaults: { + template: 'Magento_Persistent/remember-me' + }, + dataScope: 'global', + isRememberMeCheckboxVisible: ko.observable(false), + isRememberMeCheckboxChecked: ko.observable(false), + + /** @inheritdoc */ + initialize: function () { + this._super(); + + this.showElement(); + }, + + /** + * Show remember me checkbox on certain conditions + */ + showElement: function () { + let cart = customerData.get('cart'), + persistenceConfig = window.rememberMeConfig.persistenceConfig; + + if (cart().isGuestCheckoutAllowed !== false) { + persistenceConfig.isRememberMeCheckboxVisible = false; + } else { + cart.subscribe(function (cartData) { + if (cartData.isGuestCheckoutAllowed !== false) { + persistenceConfig.isRememberMeCheckboxVisible = false; + } + }, this); + } + + this.isRememberMeCheckboxChecked = ko.observable(persistenceConfig.isRememberMeCheckboxChecked); + this.isRememberMeCheckboxVisible = ko.observable(persistenceConfig.isRememberMeCheckboxVisible); + } + }); + } +); diff --git a/vendor/magento/module-persistent/view/frontend/web/js/view/remember-me.js b/vendor/magento/module-persistent/view/frontend/web/js/view/remember-me.js new file mode 100644 index 0000000000000..a4a63f5114f39 --- /dev/null +++ b/vendor/magento/module-persistent/view/frontend/web/js/view/remember-me.js @@ -0,0 +1,24 @@ +/** + * Copyright 2024 Adobe + * All Rights Reserved. + */ + +define( + [ + 'ko', + 'uiComponent' + ], + function (ko, Component) { + 'use strict'; + + let persistenceConfig = window.checkoutConfig.persistenceConfig; + + return Component.extend({ + defaults: { + template: 'Magento_Persistent/remember-me' + }, + isRememberMeCheckboxVisible: ko.observable(persistenceConfig.isRememberMeCheckboxVisible), + isRememberMeCheckboxChecked: ko.observable(persistenceConfig.isRememberMeCheckboxChecked) + }); + } +);