Skip to content

Changelog - Hyvä Checkout

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog.

Unreleased

1.1.26 - 2024-10-04

Added

  • Automatic Selection of First Payment and Shipping Method

After careful consideration, we've introduced a feature that automatically selects the first payment and shipping methods upon entering the checkout. These options can be enabled or disabled independently and are initially placed under an experimental flag.

We’ve done this intentionally, as issues may arise when the first method relies on JavaScript, potentially missing expected triggers and causing errors. We recommend enabling these settings only if you're confident your payment or shipping methods (e.g., those built with Magewire) can handle them.

Both settings can be found under Store > Configuration > Hyvä Themes > Checkout > Developer > Experimental.

Please note, these features are disabled by default and must be enabled manually.

For more information, please refer to merge request #158

Changed

  • Scope Parameter for Terms and Conditions Configuration

A scope parameter has been added to the terms and conditions configuration lookup to resolve an issue where other T&C settings were required.

For more information, please refer to issue #339

Many thanks to Bert ter Heide (iO) for the contribution!

  • Evaluation Error Message validation remove listener

A bug slipped in where when a Evaluation Error Message result was used, the validation stayed in place event when the user would interact with the component to solve the issue which cause the validation error message in the first place. A listener has been added to the Error Message result type processor, to check if the component can remove that particular validation.

For more information, please refer to merge request #363

Many thanks to Tobias Hartmann (basecom GmbH & Co. KG) for the contribution!

  • Experimental Fix for Magewire Evaluation Hydrator

We’ve introduced an experimental fix for the Magewire Evaluation Hydrator. Previously, when an update request was made to the Main component, evaluation results from all child components were merged and sent with the response to ensure the checkout recognized their states.

This addressed some niche issues where for example, after failing to accept the terms and conditions and attempting to place an order, an error would occur. If the user accepted the terms and tried again, the Main component would incorrectly recheck the conditions, leading to an endless validation loop unless the page was refreshed.

The fix now wraps the child result merging in a system setting (enabled by default), preventing the merge with the Main component’s response.

You can find this setting under Store > Configuration > Hyvä Themes > Checkout > Developer > Experimental.

No action is required when upgrading to this or later versions.

For more information, please refer to issue #329

Many thanks to Daniel Galla (iMi digital GmbH) for the contribution!

Removed

  • Nothing removed

1.1.25 - 2024-09-20

Added

  • Cascading Step Validation

We've introduced a new feature that validates each step in the multi-step checkout process. This ensures that all required steps are completed and no components requiring specific validations trigger errors or exceptions. This enhancement is part of a broader initiative to reduce the data stored in session, giving users more flexibility to navigate through the checkout process.

For more information, please refer to merge request #349

  • Configurable Redirect timeout to Order Success Page

Previously, customers were automatically redirected to the order success page after three seconds. This behavior is now fully configurable, allowing you to set a custom redirect timeout that suits your needs.

For more information, please refer to merge request #349

  • Enhanced Custom Evaluation Result Types

Creating a custom evaluation result type tailored to your specific needs now comes with more refined controls. We've introduced two new result capabilities that allow you to orchestrate your workflows with greater precision:

TaggingCapabilities: This feature allows you to tag a result type with a unique identifier, enabling better grouping or further distinction. SequenceCapabilities: Added to help orchestrate tasks by ensuring a navigation step is executed before proceeding with further navigation or order placement.

For more information, please refer to merge request #349

  • Added a MessageDialog Evaluation Result Type

As of version 1.1.18, a new hyvaCheckout.message.dialog() JavaScript API was introduced, providing developers with a universal way to display a dialog box. This includes a title, text, cancel- and confirmation button, all of which can be extended with custom callbacks. Now, this functionality can also be triggered from the PHP side, allowing you to return a MessageDialog evaluation result from your component. This is useful for scenarios such as handling validation failures or guiding customers through the next steps in the checkout process.

This API has been further extended with powerful methods, notably the withConfirmationCallback() method, which allows you to inject an Executable evaluation result type, that runs when the customer presses the confirmation button—bringing powerful backend-driven control to your front-end dialog interactions.

For more information, please refer to merge request #349

  • New Sequence Capability for Validation Result Type

We've added a new Sequence capability to the existing Validation evaluation result type, giving developers more control over the order of validations. This allows you to specify whether a validation should be run before or after another, prioritizing certain checks as needed.

For more information, please refer to merge request #349

  • Introducing the modify() Method for Enhanced Form Customization

With the new modify() method, you can now apply additional form modifications by passing a callable. This is particularly useful in scenarios where a form has been instantiated and requires adjustments without the need for a separate form modifier object.

For more information, please refer to merge request #349

  • Navigator ServerMemoConfig object

Hyvä Checkout now allows developers to pass data from the backend to the frontend with every Magewire round trip. In addition to Step History data, it now supports Navigator data, which includes details about the current and previous steps. This data is automatically synced with the hyvaCheckout.config API, ensuring that developers always have access to the latest Navigator data on the frontend, for example by using hyvaCheckout.config.getValue('navigator.history.current') to get the route name of the current step.

For more information, please refer to merge request #349

Changed

  • Expanded Functionality for Batch Evaluation Results

The Batch evaluation result has taken on a more significant role in results that can be carried with a Magewire component state. To support this, we've extended this result type with new methods, giving developers more flexibility when working with batches. You can now search for specific elements or determine if something should be added using the following methods: filter(), containsFailureResults(), and containsSuccessResults().

For more information, please refer to merge request #349

  • Enhanced Custom Evaluation Result with Argument Support

As the need for custom evaluation results grew, we saw an opportunity to enhance this result type further. Developers now have the flexibility to add additional argument data using the new withArguments() method, offering more control and customization options.

For more information, please refer to merge request #349

  • Email input group validation bugfix

Version 1.1.19 introduced a new advanced form validation feature for Hyvä Checkout called validateGroup. This addition allows developers to validate only fields assigned to a specific group, avoiding unnecessary validation of optional fields.

For example, a password field should be validated when pressing the login button, but not when placing an order if the user is already registered by email. This feature helps streamline navigation between steps without over-validating irrelevant fields. A bug related to this feature has also been identified and fixed.

For more information, please refer to merge request #349

Removed

  • Deprecation of Blocking Evaluation Result in Favor of Error Message Result

Since the initial release, a blocking evaluation result type has been available in the core product, allowing developers to completely disable the primary navigation button. However, it placed the responsibility on developers to provide additional feedback, such as error notifications.

While blocking seemed useful for preventing further actions, it often left customers confused about what to do next.

To improve user experience, we’ve decided to deprecate the blocking result and replace it with an error message result type. Now, instead of blocking, the system will display a default notification instructing customers that they must interact with the checkout to proceed. If a blocking result previously included a specific "cause", that text will be shown instead of the default one, providing clear and direct guidance.

For developers currently using the Blocking result, no immediate action is required when upgrading to this version of the checkout. The transition will happen automatically. However, we strongly encourage developers to update their implementations by replacing the Blocking result with an Error Message for a clearer and more user-friendly experience.

For more information, please refer to merge request #357

1.1.24 - 2024-09-10

Added

  • Guest Details for Virtual-Only Checkout

The Guest Details component, introduced in version 1.1.12 for most checkout variants, is now also available for the virtual-only checkout.

For more information, please refer to issue #340

Many thanks to Vladyslav Sikailo (run_as_root GmbH) for the contribution!

Changed

  • SVG Rendering and Icon Description Improvements

SVG rendering has been improved by utilizing HTML width and height attributes, and missing icon (SVG) descriptions have been resolved.

For more information, please refer to merge request #290

Removed

  • Nothing removed

1.1.23 - 2024-08-14

Added

  • Re-instated a Collect Totals for Order Summary (experimental)

We conducted extensive research on the necessity of triggering a totals recollection for the order summary component. Randomly applying totals recollection in your code is not recommended, and we strongly discourage it. To ensure the correct rendering of the order summary, we implemented the recollection at a single point in the code.

Note: This has been done cautiously, with a conditional statement that allows it to be disabled if issues arise during upgrades. We are actively working on a more robust solution, with an upgrade to Magewire V3 likely being the best approach. This upgrade will avoid single requests for each emit listener by batching them into a single request.

For more information, please refer to merge request #327

Changed

  • Comprehensive i18n/en_US.csv Translation Fixes

Fixed various translation-related issues, including avoiding null coalescing operators, correcting grammar, removing superfluous entries, adding missing frontend translations, and resolving escaping problems in the i18n/en_US.csv file.

For more information, please refer to issue #328, issue #327, issue #326, issue #325 and issue #324

Many thanks to Aad Mathijssen (iO) for the contribution!

  • Checkout Address Reset on Page Reload

Fixed an issue where reloading the checkout page resets customer address information to the default address, caused by changes in the navigation flow that incorrectly reassigned the customer's saved information during the checkout process.

For more information, please refer to issue #312

Many thanks to Antoni Tormo (Onestic) for the contribution!

  • Non-clickable Previous Breadcrumbs Steps

Fixed an issue where, in a multi-step checkout with more than two steps, previous breadcrumb steps were not clickable.

For more information, please refer to merge request #350

Many thanks to Antoni Tormo (Onestic) for the contribution!

  • Terms & Conditions Header Display on Empty List

Fixed an issue where the Terms & Conditions header was displayed even when no terms and conditions were available. The component now has its own dedicated space within the Quote Actions component, including its own Messenger.

For more information, please refer to issue #303

  • Place Order Button Not Working Due to Missing Default Shipping Address

Fixed an issue where the 'Place Order' button would not work if a customer had a default billing address but no default shipping address, due to failed validation of null shipping address fields. Customers had to reload the page or revisit the checkout for the button to function properly.

For more information, please refer to issue #256

Many thanks to Zaahed Yaqubi (Vendic) for the contribution!

Removed

  • Nothing removed

1.1.22 - 2024-07-31

Added

  • Nothing added

Changed

  • Company Field Configuration Respect

Added functionality to ensure the company field respects the visibility configuration setting.

For more information, please refer to issue #322

Many thanks to Mitchel van Kleef (Made By Mouses) for the contribution!

  • Address Modal Closing During Interaction

Changed the address modal behavior to prevent it from closing when a user clicks on an input field immediately after selecting a country in the dropdown menu during checkout. The modal will now stay open, ensuring a smoother interaction.

For more information, please refer to issue #321

Many thanks to Jeroen Noten (iO) for the contribution!

  • Correct Handling of Address Prefixes

Fixed the address prefix field handling. Previously, selecting a prefix would save numeric values to the database. Now, prefixes are saved and displayed correctly as text.

For more information, please refer to issue #320

Many thanks to Daniel Galla (iMi digital GmbH) for the contribution!

  • Support for Special Characters in Payment Method Titles

Added support for special characters in payment method titles, such as "&", to prevent checkout malfunctions. Titles with special characters are now handled correctly.

For more information, please refer to issue #315

Many thanks to Twana Gul (Cream) for the contribution!

  • Error with Empty Translation Strings

Fixed an issue where an empty translation string caused an error during the generation of the translation dictionary. The process will now complete successfully, even with empty strings.

For more information, please refer to issue #306

Many thanks to Federico Arroyo (Growlobby) for the contribution!

  • Exception in CountryAttributeField Method

Fixed an exception error in the checkout process related to the getOptions() method in the CountryAttributeField class. This method now correctly handles its arguments, preventing the error. Alongside options are now stored in memory to prevent all options being fetched multiple times.

For more information, please refer to issue #282

Many thanks to Maxim Ganses (PHPro) for the contribution!

  • Enhanced Payment Method Image Icon Rendering

Enhanced the Hyva\Checkout\Model\MethodMetaData\IconRenderer class to fully support rendering both SVG icons and additional image formats alongside payment method names. Alongside, changes were made to the abstraction preparing it to be migrated to shipping methods also.

For more information, please refer to issue #279

  • Saving Changes to Custom EAV Attributes

Fixed an issue where not all changes to custom EAV attributes in the system configuration were being saved when updating multiple attributes at once in the shipping/billing address forms. All modifications are now reliably saved.

For more information, please refer to issue #268

Many thanks to Fronius for the contribution!

  • Corrected Billing Address Street as String Handling

Fixed an issue where, in some scenarios, the billing street data was passed as a string to the address save service, causing an exception and preventing the correct saving of billing street information. The street handling has now been migrated from the shipping save service to the billing save service to resolve this issue.

For more information, please refer to issue #192

Many thanks to Daniel Galla (iMi digital GmbH) for the contribution!

  • Upgrade to Magewire v1.11.1

Magewire version 1.11.1 has been released, addressing specific requirements to resolve issue #321.. For comprehensive details on this release, please visit the official release page.

For more information, please refer to merge request #337

  • Re-introduced Step and Layout Classes for Main

During release 1.1.18, the checkout process was updated to manage steps using the Navigator, replacing the previous session-based approach. An observer that handled two additional classes for the main component was not migrated to use the Navigator, resulting in missing classes. This issue has now been resolved, reintroducing the step-{step_name} and step-layout-{layout_name} "css" classes.

For more information, please refer to merge request #332

Removed

  • Nothing removed

1.1.21 - 2024-07-12

Added

  • Added modifyFields(), modifyElements(), modifyField(), and modifyElement() methods for Forms

Added four new methods to the Hyva\Checkout\Model\Form\AbstractEntityForm class to simplify the application of repeated changes to all fields and/or elements, as well as to individual fields and/or elements. This enhancement reduces code repetition, making form modifiers more readable, and allows changes to be applied without checking for their existence, further clarifying and streamlining form modifiers.

Optionally, the new methods handle nested item relatives.

For more information, please refer to merge request #288

Changed

  • Added Missing Label to "Save in Address Book" Checkbox

Added a missing <label> tag to the "Save in address book" checkbox for better accessibility and screen reader compatibility.

For more information, please refer to issue #316

Many thanks to Ole Hornauer (Oval Media) for the contribution!

  • Added Text to Address-List Form Field Labels

Fixed the address-list form fields by adding descriptive text to the labels to ensure proper identification and usability.

For more information, please refer to issue #301

Many thanks to Adrian Wyganowski (Snowdog) for the contribution!

  • Implemented ARIA State Attributes for Steps

Implemented ARIA state attributes for steps to provide assistive technologies with the correct status information.

For more information, please refer to issue #300

Many thanks to Adrian Wyganowski (Snowdog) for the contribution!

  • Added Descriptive Labels to SKU Fields in Cart Items

Added descriptive labels to SKU fields in cart items to improve clarity and accessibility for users.

For more information, please refer to issue #298

Many thanks to Adrian Wyganowski (Snowdog) for the contribution!

  • Improved Breadcrumb Text Color Contrast

Adjusted the breadcrumb text color to improve contrast and readability, enhancing accessibility for users with visual impairments.

For more information, please refer to issue #307

  • Corrected Improper Use of Header HTML Element

Corrected the improper usage of the <header> HTML element to conform with semantic HTML standards.

For more information, please refer to issue #297

Many thanks to Adrian Wyganowski (Snowdog) for the contribution!

  • Added Form Label to Coupon Field

Added a form label to the coupon field to ensure it is properly identified and accessible.

For more information, please refer to issue #294

Many thanks to Adrian Wyganowski (Snowdog) for the contribution!

  • Tooltip Toggleable by Click

Updated the tooltip functionality to be toggleable by click, improving user interaction and accessibility.

For more information, please refer to issue #221

Many thanks to Christoph Hendreich (In-session) for the contribution!

  • Fixed Incorrect Autocomplete Values in Checkout

Fixed the autocomplete settings in the checkout form to display correct and relevant suggestions.

For more information, please refer to issue #214

Many thanks to Christoph Hendreich (In-session) for the contribution!

  • Restored Focus to Trigger Element After Closing Dialog

Ensured that after closing a dialog, the focus returns to the trigger element for a seamless user experience.

For more information, please refer to issue #195

Many thanks to Adrian Wyganowski (Snowdog) for the contribution!

Removed

  • Nothing removed

1.1.20 - 2024-07-08

Added

  • Nothing added

Changed

  • Fixed Uninitialized Class Properties in Checkout Model

Class properties $name, $label, and $hash in \Hyva\Checkout\Model\Checkout were missing default values, leading to a $name must not be accessed before initialization exception on new checkout installations. This fix assigns default values to these properties, resolving the issue.

For more information, please refer to issue #314

Removed

  • Nothing removed

1.1.19 - 2024-07-04

Added

  • Introducing validateGroup Method for Selective Field Validation

A new validateGroup(group) method has been introduced to the guest details form. This method will later be migrated to all other checkout forms. Additionally, a merge request for the theme module is planned to potentially make this feature globally available for Advanced Form Validation.

This feature enables validation of only the necessary fields required to proceed to the next step or place the order, initially for the Guest details component. For example, if a customer enters their email address and is identified as an existing customer but does not fill in the password, clicking "Login" will require the password field to be mandatory. However, this requirement will not apply when attempting to navigate to the next step.

This allows you to add a data-validate-group attribute to the element. For example, if the value of this attribute is guest-details, you can validate only these fields by calling validateGroup('guest-details').

For more information, please refer to merge request #315

Changed

  • Reapplied Body Checkout Name Classes (since 1.1.18)

Significant changes have been made to the step management system for checkout and its steps in release 1.1.18. The session-based approach has been deprecated, which means that those who relied on it will no longer receive the correct data. This issue affected the body classes, where an observer added the checkout name as a class alongside inherited classes. This problem has now been resolved.

For more information, please refer to merge request #313

Many thanks to Cian Castillo (DevTeam Outsourcing) for the contribution!

  • Reverted Development Test Code for Displaying Exceptions in Production

While testing the new notification dialogs for displaying Magewire-specific messages instead of using a Magewire-embedded modal for exceptions, we overlooked reverting the test code that checks if the system is in production mode. This has now been corrected. As a result, you will see an exception message in developer mode and a customer-friendly error notification in production.

For more information, please refer to merge request #309

  • Added Missing Z-Index to Backdrop for Terms and Conditions

A z-30 class was added to the Terms and Conditions modal backdrop.

For more information, please refer to merge request #303

  • Unescaped Terms and Conditions Text

Previously, the Terms and Conditions text was always escaped, which prevented the use of HTML elements such as href and line breaks. This limitation has been addressed by implementing the getIsHtml() method, ensuring that text is only escaped when necessary.

For more information, please refer to issue #299

  • Fixed Guest Order Name Storage Issue in Magento 2.4.3-p3

Resolved an issue where guest orders placed on Magento 2.4.3-p3 did not store the customer's first and last names in the database, resulting in these fields being set to NULL. This caused the names to be omitted from the order view in the admin, displaying "Guest" instead. This behavior was inconsistent between the Hyvä checkout and the Luma checkout.

For more information, please refer to issue #288

Many thanks to Stepans Mihailisins (Arcmedia AG) for the contribution!

  • Fixed Translation Issue with "Save in Address Book" Label

Resolved an issue where the "Save in address book" string in the form was not translating correctly.

For more information, please refer to issue #295

Many thanks to both Louis de Looze (eWings nv.) and Simon Sprankel (CustomGento GmbH) for the contribution!

  • Fixed Back Button Navigation Issue from External Pages

Resolved an issue where pressing the browser's back button on an external page, redirected users to the /checkout/cart page instead of /checkout.

For more information, please refer to issue #274

Many thanks to Thijs de Witt (Trinos) for the contribution!

Removed

  • Nothing removed

1.1.18 - 2024-06-07

Added

  • Universal Messaging Dialog

We’ve introduced a new hyvaCheckout.message.dialog() API to provide a native method for delivering essential information to customers about specific processes. This dialog can queue multiple messages, allowing users to navigate through them using pagination.

The message dialog replaces numerous modals cluttering the DOM tree and bloating the HTML. We plan to transition certain existing message modals to this new universal format in the near future. All Magewire error confirm() dialogs have already been replaced.

For more information, please refer to merge request #304

  • Executed after for Navigation Tasks on Place Order

We’ve included a automatic dispatch of the executeAfter() for Navigation Task evaluation results that are injected by native or custom Place Order Services. This ensures that every injected navigation task will only be executed after the place order process has succeeded. Previously, this had to be done manually; now it has been automated. For instance, if you want to display a 3DS verification dialog via JavaScript right after the order is placed but before the customer is redirected to the success page, this is now handled automatically by default.

For more information, please refer to merge request #286

  • Navigation history

Thanks to Magewire, navigating between steps feels like using a SPA (Single Page Application) without any page loads. Now, with the introduction of a URL route-driven step management system (see: Session-driven checkout config removal), we can make great use of the native browser History API. Each successful step is pushed into the history, allowing customers to move back to a previous step using the browser's forward and backward buttons.

For more information, please refer to merge request #305

Changed

  • Session-driven checkout config removal

A major task we’ve been anticipating for a while has finally been addressed. Before this release, the navigation state of the checkout was stored within a specific session, which was automatically managed as soon as the customer entered the checkout or navigated between steps.

This has been completely removed, meaning navigation state data is no longer stored in the session; it is now managed by the URL route step parameter. We’ve ensured backward compatibility, so customers using a session-driven checkout won’t lose their state during deployment.

For more information, please refer to merge request #305

  • Step condition remove fix

We’ve introduced significant improvements to the hyva_checkout.xml converter in 1.1.17 release, enhancing features like multi-level checkout inheritances. During this refactor, a bug was introduced where conditional layout handle items were still applied even if they were marked with remove="true". We released a patch the day after the initial release, and this fix has now been integrated natively, eliminating the need for the patch.

For more information, please refer to merge request #285

Many thanks to Ronak Limbachiya (Bliss Web Solution Pvt. Ltd) for the contribution!

Removed

  • Nothing removed

1.1.17 - 2024-05-13

Added

  • Checkout step clone attribute

We've introduced the capability to clone steps from a particular checkout without requiring it to be explicitly defined as a parent. This feature empowers you to craft a checkout without the necessity of inheriting from a parent while still being able to include one of its steps seamlessly, eliminating the concern of managing data changes.

Steps can be cloned by utilizing the {checkout_name}.{step_name} value for the clone attribute within a step element.

It's worth noting that overwriting data such as the label, layout, and so forth is still feasible.

For more information, please refer to merge request #278

  • Coupon code for applied and revoked Magewire emit events

Now, the actual coupon code is included in both the coupon_code_applied and the coupon_code_revoked Magewire emit events. This enhancement grants developers the ability to listen for an emit event within JavaScript using Magewire.on('{event_name}') and effectively interact with the coupon code provided by the customer.

For more information, please refer to merge request #272

Changed

  • Form field previous value improvements

We encountered some edge cases where the previous value did not align correctly with the current value set in the field. This discrepancy resulted in conflicts when attempting to make form changes based on a comparison of value changes. To resolve this issue and enhance reliability, we have implemented adjustments to the Form API.

For more information, please refer to merge request #266

Many thanks to Tjitse Efdé (Vendic) for the contribution!

  • Multi-level checkout inheritance improvements

We encountered an issue where inheriting from a checkout more than two levels deep caused problems in copying all data from upper level checkouts, rendering it ineffective. Essentially, although inheriting from a parent checkout was already possible without restrictions, only the checkout data would be inherited, with elements such as parent layout update handles left out. We've addressed this issue along with other minor edge cases.

For more information, please refer to issue #253

Many thanks to Rajeev K Tomy (integer_net) and Edwin Bos (Cream) for the contribution!

  • Order success message visibility fix for mobile

Under normal circumstances, after a successful order placement, customers are presented with a view that includes a message indicating redirection within a few seconds. This behavior also applied to mobile users. However, if the "place order" button was located towards the bottom of the screen, the viewport wouldn't automatically scroll to the top to provide users with a clear view of the impending action. This issue has now been resolved.

For more information, please refer to issue #272

Many thanks to Arko Rietdijk (Betersport) for the contribution!

  • Replaced the 404 response config dialog

We've enhanced the user experience by replacing the confirmation dialog in the 404 Magewire update response with a sleek Hyvä modal.

For more information, please refer to issue #284

Removed

  • Nothing removed

1.1.16 - 2024-04-11

Added

  • Magento 2.4.7 support

We've upgraded to Magewire 1.11.0 to support Magento 2.4.7.

For more information, please refer to merge request #241

  • Form renderers Image, URL, Reset and Radio

We've added new form options to create elements such as images, URLs, and reset buttons, along with the radio field. The 'reset' form button is inherited from the button template, while the others now have their own templates.

For more information, please refer to merge request #271

Changed

  • Navigation button UTF-8 label support

We've updated the button label echoing from using strtolower to mb_strtolower with UTF-8 encoding.

For more information, please refer to issue #54

Many thanks to Marcus Venghaus (Freelance) for the contribution!

  • Fixed a non-Latin1 component messenger bugfix

We've resolved a hashing issue in the messenger component, enabling the hashing of non-Latin1 characters.

For more information, please refer to issue #255

Many thanks to Baldwin Agency for the contribution!

  • Telephone field display and require bugfix

The EAV customer address telephone attribute object was not responsive to system configuration settings that toggle the display of the field and/or its requirement.

For more information, please refer to issue #269

Many thanks to Mykola Orlenko (integer_net GmbH) for the contribution!

  • Upgraded the "Save in address book" form element

We've updated the 'Save in address book' feature to utilize the latest Form API rendering. Now, the checkbox is rendered using the checkbox template, resulting in a significantly smaller component template and greater composability via layout XML.

For more information, please refer to issue #267

Removed

  • Nothing removed

1.1.15 - 2024-03-14

Added

  • Multi tab out-of-sync notification modal

Implemented a new feature that actively monitors navigation changes, such as proceeding forwards or backwards within steps, or completing an order transaction. This enhancement includes the introduction of an 'out of sync' notification modal, which promptly alerts users in inactive browser tabs when multiple checkout sessions are concurrently active across different tabs.

For more information, please refer to issue #251

Many thanks to Robert Duffner (FindCanary) for the contribution!

  • Missing Cash On Delivery method template

Integrated the missing Cash On Delivery method template, allowing for seamless rendering of any backend system-provided instructions.

For more information, please refer to issue #254

Many thanks to Adam Sarkadi (Baldwin) for the contribution!

  • Evaluation executables callback params

Since version 1.1.13, significant enhancements have been made to our Evaluation API, particularly focusing on flexibility and functionality. Notably, we've introduced the capability to inject JavaScript-driven executables, which are essentially registered callbacks on the frontend. These callbacks execute based on instructions from the Magewire component, enriching the frontend experience. In this release, we've further refined this feature by adding support for passing arguments to these executable callbacks, thereby enhancing their versatility and utility.

For more information, please refer to issue #259

  • Top destinations for country select

Administrators within the Magento system have the capability to designate top destinations, which were previously not reflected in the country select dropdown on checkout address forms. In this update, we've introduced the functionality to automatically include these specified countries at the top of the list, followed by all others.

For more information, please refer to issue #234

Many thanks to Dennis Volkering (Web4exposure) for the contribution!

Changed

  • Re-introduction of the save address checkbox

In response to user feedback, we have reinstated the 'save address' checkbox, inadvertently removed since release 1.1.13.

For more information, please refer to issue #258

Many thanks to Nick Ottens (Elgentos) for the contribution!

  • Blocking evaluation result unblocking fix

When encountering a blocking evaluation result type, the primary navigation buttons were previously disabled to prevent customers from clicking them, ensuring data integrity and accuracy. However, this resulted in potential navigation restrictions for users even after resolving any issues. In this release, we've addressed this by implementing a mechanism where blocking result types can now dynamically unblock themselves upon receiving a different result from the server. This allows for smoother navigation and order placement, ensuring a more seamless user experience.

For more information, please refer to issue #262

Many thanks to both Matthijs Perik (Ecomni) and Klaas van der Weij (iO) for their contribution!

  • Tax detail extension attribute type annotation naming violation

We've resolved a type annotation naming violation that previously triggered errors in Swagger.

For more information, please refer to issue #246

Many thanks to André Flitsch (Pixel Perfect) for the contribution!

  • Enterprise: Fixed a Gift Wrapping summary total rendering issue

We've successfully addressed an issue where the rendering of the gift wrapping summary total would break due to the inability to locate an extension attribute block caused by a wrong return type. This problem had broader implications, but we've rectified it without introducing any backward incompatible changes.

For more information, please refer to issue #249

Many thanks to James Anderson (United Wheels) for the contribution!

Removed

  • Nothing removed

1.1.14 - 2024-03-04

Added

  • Nothing added

Changed

  • Password validation for guest authentication

With the unveiling of the new Guest Details component, existing customers now have the opportunity, under specific circumstances, to authenticate using their email addresses if they are already present in the database.

However, the password field previously imposed the same stringent password strength validation as the one utilized on the registration form. We have since revised this requirement, making it required only.

  • Reversion of Breaking Change in Place Order Services Abstraction

During the release of version 1.1.13, an unintended breaking change occurred wherein the Place Order Service abstraction unexpectedly returned a false result instead of the expected true. Consequently, this release rectifies the issue, eliminating the necessity for a previously released patch.

Removed

  • Nothing removed

1.1.13 - 2024-02-23

Added

  • Frontend Config + Storage APIs

In this update, two new objects have been added to the Frontend API, enabling developers to access specific configurations injected from the backend. Additionally, the Storage API now provides a mechanism for storing data in the browser's session storage. Notably, this data is automatically integrated into the Place Order Service, facilitating payment integrators in securely passing credit card information to the service without the need for server-side storage, thereby ensuring PCI compliance.

  • Clickable abstract form element

Introducing an abstraction for all clickable form elements, applicable to various elements including URLs and buttons of all types.

  • Magewire abstract form component

The Magewire component abstraction has undergone a complete overhaul, integrating all insights gathered regarding form requirements, including action execution and modifications. This refined abstraction layer has already been applied in the Guest Details component, released in version 1.1.12, and is set to migrate to the current shipping and billing forms, enhancing their functionality without necessitating overwriting the object itself.

This updated abstraction remains fully backward compatible with existing forms while introducing several new modification hooks, such as form:mount:magewire, form:execute:submit:magewire, form:data:updating:magewire, and form:data:updated:magewire.

Additionally, it incorporates a dynamic hook for clickable form elements, enabling custom methods like form:execute:{custom_method_name}:magewire. For instance, a custom button such as a "Sign In" button can trigger the form:execute:sign_in:magewire form modification hook.

  • YesNoForce config source model

An addition of a custom YesNoForce source model provides admin select elements with an extra 'Force' option.

  • Three Evaluation API capability traits

Three new Evaluation API capability Traits have been introduced for utilization in custom Evaluation Results.

The first capability, StackingCapabilities, enables the execution of evaluation results at specific positions. For example, if you need to execute two frontend functionalities, with one preceding a core functionality and the other following it, you can use the withStackPosition() method to achieve this.

The second capability, BlockingCapabilities, allows a custom evaluation result to block primary navigation buttons by simply utilizing the asBlocking() method.

The final capability, DispatchCapabilities, empowers developers to dispatch a particular evaluation result immediately after the Magewire XHR response returns to the frontend. This capability enables actions such as displaying a specific message directly, rather than waiting for validation failure during the customer's attempt to proceed to the next step or place an order.

  • Six Evaluation API result types

The Evaluation API has been an integral part of the core from the outset, primarily serving to evaluate a Magewire component during both page rendering and updates. Components can optionally implement the EvaluationInterface, allowing them to convey a "recipe" to the frontend, which a processor would then execute accordingly.

For instance, this could involve displaying an error message due to an unfilled field as soon as a customer clicks on a primary button like the Place Order button.

Six new Evaluation result types have been introduced, providing developers with greater flexibility to provide specific instructions to the frontend. Among these, the Batch result type is particularly noteworthy. It allows for the return of multiple instructions instead of just one, reducing the number of XHR requests to the backend.

Alongside important types such as NavigationTask, Redirect, Validation, Executable, and Custom, the Batch result type stands out for its efficiency in frontend instruction management.

  • SessionStorage ServerMemoConfig object

Introducing the 'Server Memo Config' feature, which empowers developers to inject configuration values from the backend into the Frontend API immediately upon the Frontend API booting on the frontend. This capability allows for the injection of data, which can now be retrieved using the hyvaCheckout.config.getValue() method. Specifically, the SessionStorage object injects an empty array for both 'shipping' and 'payment'. These arrays serve as storage for specific payment and shipping information, which will ultimately be seamlessly transferred to the Order Place Service.

  • Redirect notification and configuration dialog

The Evaluation Redirect result type empowers developers to implement a Redirect awareness notification or confirmation dialog. With the notification, customers are promptly informed about an impending redirect. In contrast, the confirmation dialog offers customers the option to either confirm or dismiss the redirection.

  • Redirect Evaluation API system config settings

This functionality enables store admins to configure Redirect dialog settings, including options such as enabling notification and confirmation dialogs, specifying the text for notification and confirmation messages, and setting the default duration for dialog visibility.

  • After containers for each frontend API object

Certain JavaScript functionalities necessitate or should extend specific Hyva Checkout APIs. In each API section, there is now a @internal annotation marked assisting PHTML files, ensuring their execution before any third-party code. By utilizing these after containers, developers can inject custom code with precision, ensuring that all the required components are in place.

  • Memoize available regions

A slight enhancement has been implemented to optimize the performance by memoizing the available regions for a particular country. Previously, this process would entail fetching them multiple times. Now, it is executed just once and stored in memory for the duration of the running session, resulting in improved efficiency.

For more information, please refer to issue #245

Changed

  • Main component placeOrder $data argument

The Hyva\Checkout\Magewire\Main component, responsible for functions such as step navigation and order placement, now has the ability to accept data from the frontend, which it subsequently passes to the associated Place Order Service. This enhancement allows developers to store data in browser storage rather than solely on the server.

Notably, session storage is automatically transmitted to the placeOrder method within the Main component.

  • Place Order Service extended with the Evaluation API

The Evaluation API has been expanded into the Place Order Service, enriching its functionality to offer developers capabilities similar to those available for regular checkout components. Consequently, the place order processor is now equipped to transmit a Redirect result type to the frontend, directing it to a designated URL while presenting a confirmation dialog beforehand.

Another critical aspect of this extension is the ability to instruct the component to execute specific JavaScript after the order has been placed. This feature is particularly useful for scenarios such as displaying a 3DS authentication modal before redirecting to the PSP payment- or order success page.

  • URL form element extends from Clickable

Given that a URL functions as a clickable HTML element, the form element has been extended to inherit from Clickable.

  • PlaceOrderServiceProcessor marked as @internal

The Hyva\Checkout\Model\Magewire\Payment\PlaceOrderServiceProcessor is now designated as @internal, indicating to developers that they should refrain from utilizing it for their own payment methods and instead leave the order placement to the Main component.

  • isVisible wrapped for form select elements

A visibility bug concerning form select elements, which lacked a wrapping if statement to determine whether the element should be rendered, has been resolved.

  • messagesSuccessListener component messenger event listener

The Hyva_Checkout::page/messenger.phtml component accessory, which may be found within the shipping and billing forms, now has the capability to listen for a success event. This enhancement empowers developers to hide the message using JavaScript when it is no longer necessary.

  • AbstractPlaceOrderService getData() method added

The place order service has been enhanced with a getData() method, which retrieves a Hyva\Checkout\Model\Magewire\Payment\AbstractOrderData object containing the data passed when the customer pressed the Place Order button. This method facilitates retrieval of payment data stored in the session storage.

  • Fixed totals return segment items of type TotalSegmentInterface

An issue has been addressed wherein the \Hyva\Checkout\ViewModel\Checkout\PriceSummary\TotalSegments::getTotals() method was expected to return an array of TotalSegmentInterface[]. However, it previously returned array[] due to a sorting operation applied to the final array.

For more information, please refer to issue #231

Many thanks to Simon Sprankel (CustomGento) for the contribution!

Removed

  • Nothing removed

1.1.12 - 2024-02-06

Added

  • Guest login component

We're happy to unveil our latest addition: a sleek new component inspired by the familiar guest login feature found in the Luma checkout. This component seamlessly integrates both an email address field and an optional password field. The password field will dynamically appear if the email address corresponds to an existing customer and/or if the login feature is enabled in the backend component configuration.

For more information, please refer to merge request #240

Changed

  • Nothing changed

Removed

  • Nothing removed

1.1.11 - 2024-02-02

Added

  • Prices now include both inclusive and exclusive tax

In this update, inclusive (incl.) and exclusive (excl.) tax prices are now concurrently displayed across various components, including shipping methods and the price summary, when the configured backend settings are applied. Unlike the previous versions, that limited visibility to either inclusive or exclusive tax prices, the enhanced feature allows for the simultaneous presentation of both. The inclusive tax price takes precedence as the primary figure, with the exclusive price displayed as its child, appropriately labeled with the exclusive tax name.

For more information, please refer to issue #177

Many thanks to Jeroen Balk (Adwise) for the contribution!

  • Form element accessory rendering

We've extended the so-called "form element accessory" functionality giving the option to render your own accessory, which can be a label, tooltip or comment. Accessories may be seen as support elements to clarify e.g. inputs helping the customer to make better choices when interacting with the form. Out of the box, we now support the rendering of labels, tooltips, before- & after container. The renderAccessory method has now been opened up.

  • Added a "Billing as shipping address" emit event

Regardless of the toggle value for 'My billing and shipping address are the same', the billing component will now consistently emit a billing_as_shipping_address_updated event, providing a point of observation within other Magewire components.

For more information, please refer to issue #219

Many thanks to Ryan Hoerr (Paradox Labs) for the contribution!

Changed

  • Corrected display of shipping price after a page refresh

Resolved a bug in the shipping price display, where selecting a shipping method initially resulted in an accurate summary with correct shipping prices. However, upon refreshing the page, the displayed price would change to an incorrect value. This issue has been identified and successfully addressed in this update.

For more information, please refer to issue #200

Many thanks to Dave Kleijn (Accent Interactive) for the contribution!

  • Price totals summary update after address switch

Resolved an issue where the price summary failed to update when selecting an address with varying tax rates, such as from a different country. This fix ensures that the summary now promptly updates when the customer switches to an address with distinct tax conditions.

For more information, please refer to issue #235

Many thanks to Aad Mathijssen (iO) for the contribution!

  • Price totals summary update shipping costs upon saving the address

Addressing issue #235, price summary display has been rectified to accurately reflect the correct prices.

For more information, please refer to issue #224

Many thanks to Nick Hall (MFG Supply) for the contribution!

  • Price totals summary update on billing address select

In certain scenarios, the price total summary needed an update when a billing address was saved or an existing billing address was selected. To address this, we've introduced two new Magewire listeners: billing_address_saved and billing_address_activated. These listeners ensure that the price total summary is now appropriately updated in response to these billing address events.

For more information, please refer to issue #239

Many thanks to Aad Mathijssen (iO) for the contribution!

  • Checkbox renderer now includes a before and after container

The checkbox PHTML, unlike other form input renderers, previously lacked a before and after rendering container, preventing the inclusion of additional DOM elements right before or after a checkbox input form element. This limitation has now been addressed.

For more information, please refer to issue #220

Many thanks to Jeroen Balk (Adwise) for the contribution!

  • Form modifications added multiple times during runtime

Previously, the form initialization within the __construct method led to the unintended application of form modifiers multiple times, causing an exception that was silently logged into the exception log. To address this, we have now relocated the form initialization to the boot method. This adjustment ensures that the issue no longer occurs, preventing unnecessary exceptions in the future.

For more information, please refer to issue #237

Many thanks to Dimitri Robert (Horace) for the contribution!

Removed

  • Nothing removed

1.1.10 - 2024-01-09

Added

  • Nothing added

Changed

  • Fixed configurable shipping address form auto-save timeout

Unlike the billing address form object, the getAutoSaveTimeout method in the shipping address form class previously overlooked the system configuration setting. It was hardcoded with a return value of 3000. This issue has been rectified by updating the method to dynamically retrieve the value from the backend configuration.

For more information, please refer to merge request #227

Many thanks to Simon Sprankel (CustomGento) for the contribution!

  • Address attribute requirement no longer supersedes the system configuration

We've modified both the shipping- and billing form grid configurations. With this update, these settings will now take precedence over the enabled and required value within the attribute settings themselves. Among other things, this allows the designation of a second street field as a required field.

Important Note: During the upgrade, review both shipping- and billing form configurations to ensure that all necessary fields are properly set as enabled and required.

For more information, please refer to issue #201

  • Enterprise street lines support

The display of street lines was previously determined by inspecting the customer/address/street_lines configuration setting. This approach has been updated, and the number of street lines is now determined by the \Magento\Customer\Helper\Address::getStreetLines() method, ensuring compatibility with Adobe Commerce.

For more information, please refer to issue #175

Many thanks to Aad Mathijssen (iO) for the contribution!

  • Fixed waiting on events that do not listen on event

Resolved an issue in the backend component where using emitTo caused a malfunction in the 'place order' button functionality. This update ensures that pendingEmits is correctly populated when using emitTo, resolving the issue.

For more information, please refer to merge request #225

Many thanks to Kamil Balwierz (Snowdog) for the contribution!

  • Missing translations

Missing translations have now been added to the en_US.csv dictionary.

For more information, please refer to issue #210

Many thanks to Nicola Spadari (Bitbull) for the contribution!

  • Fixed region field visibility issue

Resolved an introduced in Hyvä Checkout 1.1.8 by MR 210, where configuring the general/region/display_all setting to 0 (the "Allow to Choose State if It is Optional for Country" admin setting) no longer hid the region input for countries where states are optional.
Instead, a required text input was displayed.

For more information, please refer to merge request #227

Many thanks to Aad Mathijssen (iO) for the contribution!

  • Fixed a "Unexpected token '}'" address list issue

Introduced a 0 fallback value in case the getId() method returns an empty value. This prevents the generation of invalid JavaScript.

For more information, please refer to issue #225

Many thanks to Yevhen Hlinskyi (AIDALAB) for the contribution!

  • Form input values trailing whitespaces trim

In the past, trailing whitespace in form input values was allowed, occasionally leading to problems during the save process. To address this, trailing whitespace is now automatically trimmed from input values when using the setValue() function, mitigating potential issues during data storage.

For more information, please refer to issue #217

Many thanks to Christoph Hendreich (In-session) for the contribution!

  • Enhanced the shipping method list radio button positioning

Previously, radio buttons were vertically centered based on the combined height of both the header and the shipping method content block, resulting in the radio button appearing as detached or "free-floating." This has been resolved by repositioning the radio button adjacent to the shipping method title, ensuring a more cohesive and visually aligned layout.

For more information, please refer to issue #213

Many thanks to Christoph Hendreich (In-session) for the contribution!

  • Fixed cart unfolding issue

We've corrected an issue where the $canUnfold variable was inaccurately set solely based on the "Unfold" configuration value, disregarding the specified cart item limit threshold. With this fix, $canUnfold is now accurately determined by both the "Unfold" configuration and the cart item count, ensuring it is set to true only when both conditions are met and false otherwise.

For more information, please refer to merge request #219

Many thanks to Nick Hall (MFG Supply) for the contribution!

Removed

  • Nothing removed

1.1.9 - 2023-12-05

Added

  • Payment methods list refresh on coupon code apply or revoke

The payment methods list will now try to refresh itself as soon as a coupon code is applied or revoked.

For more information, please refer to merge request #213

Changed

  • Fix backward navigation for guests

In Release 1.1.8, a bug was identified that prevented guests from navigating back until all navigation tasks, including form validation, were fully resolved. The issue stemmed from our frontend API's inability to access data from previous steps. This release resolves the issue.

For more information, please refer to merge request #212

Many thanks to Marcus Venghaus (Freelancer) for the contribution!

  • Zipcode requirement by country bugfix

We implemented zipcode requirements based on the selected country during the early stages of our Form Modification API. At that time, the framework lacked support for multiple scenario hooks. In a later phase, we introduced additional hooks without modifying the Zipcode requirement form modifier.
This change resolves the issue so the zipcode field is now marked as required or not correctly.

For more information, please refer to issue #222

Many thanks to Cian Castillo (Vetshop group) for the contribution!

Removed

  • Nothing removed

1.1.8 - 2023-11-03

Added

  • Nothing added

Changed

  • Street fields value spreading bugfix

In Release 1.1.7, a bug was introduced where the wire:model field attribute would receive the value {field_id}.{field_id}.0 instead of the expected {field_id}.0. This issue affected all fields that had one or multiple related elements assigned to them. Consequently, Magewire was unable to correctly distribute values among these related elements, causing them to be merged into a single value within the parent field.

  • Active CSS class isn't set for shipping- and/or billing address listing

The active class should consistently apply to logged-in customers with one or multiple addresses in their address book. However, this was not the case due to a discrepancy in the x-data attribute, where the active address ID was rendered as a string, causing it to fail the strict comparison against the expected int value.

For more information, please refer to issue #207

Many thanks to Antoine Fontaine (Dn'D) for the contribution!

  • Tax summary doesn't show correct tax amount

In Release 1.1.7, a new feature was introduced, allowing the rendering of price summary item extension attributes through a layout XML renderer. However, the initial renderer we introduced had a calculation error for each rate, which has now been corrected.

For more information, please refer to issue #206

Many thanks to Chathura Maduranga (Supply App) for the contribution!

  • State/Province fields required status not updated as per country configuration

The region field was not adhering to the store configuration settings for determining when it should be required. Instead, it solely relied on the 'require' value set in the region attribute. This issue has been resolved.

For more information, please refer to issue #205

Many thanks to Nathan Day (Wind and Kite) for the contribution!

Removed

  • Nothing removed

1.1.7 - 2023-10-31

Added

  • Added a named navigation class to each button

Every button in the primary navigation bar now automatically gets a named class to target each button specifically.

For more information, please refer to merge request #97

Many thanks to Alice Dean (Fisheye a Youwe company) for the contribution!

  • One column row Street field renderer

In a prior release, we introduced an optional street fields renderer. When activated in the configuration, this renderer displays the specified street fields in a grid structure. Now, you have the option to choose a second renderer type that we've dubbed the "One Column Row" renderer, which will present the street fields in a single row.

For more information, please refer to merge request #201

  • Form input hidden renderer

This release introduces a hidden input renderer which is used for hidden input form fields.

For more information, please refer to merge request #195

Changed

  • Price summary item extension attribute render option

In the past, different tax rules were shown as a single item in the totals summary component. We've expanded the rendering to automatically include a summary item extension attributes when added as a renderer item via layout XML. This enhancement is already in place for tax rules, which now display the rule label, price, and percentage.

For more information, please refer to issue #199

Many thanks to Chathura Maduranga (Supply App) for the contribution!

  • Fixed checkout hash issue

We've resolved an issue where customers would experience a checkout reset when the hyva_checkout cache was cleared. This occurred because a unique hash was associated with each generated checkout. The hash would only update if modifications were made via hyva_checkout.xml. However, since all layout handles with array keys were generated through uniqid, they were different each time. Now the array keys are predictable and won't change.

For more information, please refer to merge request #203

  • Frontend API hyvaCheckout.config

This release introduces a frontend configuration API that allows directly injecting frontend configuration settings from PHP. This API operates in a manner akin to the store configuration, offering functions like getValue() and isSetFlag(). To inject configuration settings, you can use the ServerMemoConfigInterface. Notably, this configuration object is passed as the first argument in each initialize() method, ready for use during frontend initialization.

For more information, please refer to merge request #195

  • Added form fields attribute method removeAttributesStartingWith

We've introduced a new method removeAttributesStartingWith that is used by all form fields. It allows developers to eliminate all attributes associated with form fields that begin with a specified string. For instance, all Magewire-related attributes can now be removed in a single operation.

For more information, please refer to merge request #195

  • Rewrote Messenger Component

We've revamped the Messenger Component API that was originally part of the messenger.phtml template. Now it can be utilized within custom components, without relying on the messenger template. Furthermore, we've made slight modifications to messenger.phtml so it aligns with the new API. The primary advantage of this update is the ability to dispatch multiple messages concurrently.

For more information, please refer to merge request #195

  • Fixed multiple checkout session object code smells

We have identified methods within the session configuration object that could lead to issues in very specific situations. To enhance the developer experience, we've addressed these issues in this release.

For more information, please refer to issue #202

Many thanks to Thomas Hägi (Refusion) for the contribution!

  • Upgrade to Magewire 1.10.10

The dependency constraint update to version 1.10.9 of Magewire was made to accommodate a novel feature within Magewire, enabling the placement of custom Magewire Hydrators based on order numbers at specific locations within the call stack.

A dependency constraint update to version 1.10.10 of Magewire was made to leverage the new Magewire.hasPlugin(pluginName) method. This was used to resolve an issue encountered during the frontend API initialization process, where an error would occur due to the absence of the Magewire Loader plugin when it was disabled in the system configuration.

For more information, please refer to merge request #193 and merge request 200

Many thanks to Jacob Nguyen (JaJuMa GmbH) for the contribution!

  • Fixed a layout handle code comment typo

Fixed a template identifier bug in a comment. The example previously used a slash instead of the double colon syntax.

For more information, please refer to issue #190.

Many thanks to Christoph Hendreich (In-session) for the contribution!

Removed

  • Nothing removed

1.1.6 - 2023-10-06

Added

  • Added IntelliSense compatibility

Restructured all PHTML files to be IntelliSense compliant in terms of @var, declare and use.

For more information, please refer to issue #178.

Many thanks to Jeroen Balk (Adwise) for the contribution!

Changed

  • Fixed Magento HTML minification

Added multiple line ending semicolon to the default messenger PHTML to solve Magento HTML minification errors.

For more information, please refer to issue #158.

Many thanks to Marcus Venghaus (Freelancer) for the contribution!

  • Fixed selected payment method de-select after a component refresh

Resolved an issue in certain scenarios where, following a refresh of the payment method list component, the selected payment method was not visually highlighted, resulting in an evaluation failure.

For more information, please refer to issue #155.

Many thanks to Christoph Hendreich (In-session) and Soham Bhosale (Hummingbird) for the contribution!

Removed

  • Nothing removed

1.1.5 - 2023-09-27

Added

  • Allow disabling form modifiers using a null argument item

Form modifiers are now filtered to allow for the disabling of existing modifiers within di.xml.

For more information, please refer to issue #176.

Many thanks to Jeroen Balk (Adwise) for the contribution!

  • Allow street field labels to be configured per store

For more information, please refer to merge request #170

Many thanks to Ronald Bethlehem (Freelancer) for the contribution!

  • Fields now have a hasAttributesStartingWith method

You can now check if a field possesses an attribute that begins with a specific string. This feature can be useful for determining whether a particular setting needs to be configured within a Form Modifier callback.

For more information, please refer to issue #173

Changed

  • Removed Checkmo payment method content margin on empty context

For more information, please refer to issue #165.

  • Fixed exception on empty terms and condition message

When the terms and conditions are configured to display a message, but no message is provided, the checkout used to raise an exception. This issue has been resolved by requiring the config field and returning an empty string for backward compatibility.

For more information, please refer to issue #171.

Many thanks to Jeroen Balk (Adwise) for the contribution!

  • Upgrade Magewire from 1.10.7 to 1.10.8

For more information, please refer to merge request #184.

  • Call loader.stop with dummy component to avoid error

For more information, please refer to merge request #180.

  • Billing address shows email field only for virtual quotes

In the past, guest users were presented with an email address form field in the shipping and billing address.
This email address was also used as the order contact email. However, this has since changed, with the shipping email address now serving as the primary contact email for orders. The email field for billing addresses will now only be displayed for quotes containing only virtual items.

For more information, please refer to issue #164

Many thanks to Rocky Notten (Wickey) for the contribution!

Removed

  • Removed an unused data argument from the frontend payment.placeOrder() method

For more information, please refer to issue #118.

Many thanks to Andrzej Wiaderny (Hatimeria) for the contribution!

  • Removed dependency on default hyva-theme styles in favor of default tailwindcss classes

This is a backward incompatible change. If you rely on a customized text-primary class for the breadcrumb text color, be aware that it will change to text-gray-800 after the upgrade. To revert the change, customize the css in your theme to apply text-primary again to the selector css #hyva-checkout-main .breadcrumbs .item.

For more information, please refer to issue #57.

1.1.4 - 2023-08-29

Added

  • Added built-with HTTP response header to hyva checkout routes

We've added an x-built-with: Hyva Checkout header to Hyvä Checkout pages.

For more information, please refer to merge request #164.

Changed

  • Improve default checkout header

Previously the checkout used the checkout page layout.
This was changed to 1column to provide better styling and improved compatibility with the Hyvä theme out-of-the-box.
To remove the top menu, search box, and customer account menu, a new header template was introduced.

This is a backward-compatibility breaking change. Please refer to the 1.1.4 upgrade notes for more information on how to upgrade.

For even more details, please refer to issue #149 and merge request #166.

  • Fix critical error when customer enters percent sign in order comment

Previously order comments containing a percent symbol broke rendering in the frontend and admin area.

For more information, please refer to merge request #163.

Many thanks to Jeroen Noten (iO) for the contribution!

  • Immediately clear Magewire validation errors on user input

Previously the error message remained visible until after the field lost focus. Now the message is hidden as soon as a user changes the value.

For more information, please refer to issue #162.

Removed

  • Nothing removed

1.1.3 - 2023-08-15

Added

  • Nothing added.

Changed

  • Apply sales rules Free shipping, table-rate etc price adjustments to shipping method on address change

Please refer to issue #131 for more information.

Many thanks to Justin van Elst (Publicus) for the contribution!

  • Check Country and Region fields are present before applying modifications

Hyva\Checkout\Model\Form\EntityFormModifier\WithRegionModifier attempted modifications on the region field without verifying the presence of both the essential country_id and region fields on the form. This led to issues when the fields were removed. Now they can be removed safely from address forms.

Please refer to merge request #157 for more information.

  • Showing shipping method prices incl. or excl. tax according to configuration

Please refer to issue #133 for more information.

Many thanks to Justin van Elst (Publicus) for the contribution!

  • Billing address email not captured when shipping email changed

When a guest customer enters their email address and the shipping address is the same as the billing address, the email is processed successfully. However, when a customer then modifies the shipping email address, the changed email was not set for the billing address.

Please refer to issue #140 for more information.

Many thanks to Ameer Potrik for the contribution!

  • Form field method getPreviousValue() improved

In the 1.1.2 release, we introduced a new form field feature to get the previous value. This feature is handy during form updates to check if a specific field was changed. We've since noticed some flaws in the flow, which are now improved. Also, we've added form:boot and a form:{form_namespace}:boot modification hooks to apply changes on both preceding and subsequent form boot.

Please refer to merge request #155 for more information.

  • Select input renderer template now uses $key instead of $option

The template for the form field select input has been enhanced. It now uses the $key variable for all string-type options. This enhancement provides developers with a more effective approach to associating values with options, especially in cases where the $option variable is dynamic or subject to change.

Please refer to merge request #115 for more information.

Removed

  • Nothing removed.

1.1.2 - 2023-08-09

Added

  • New form modification hooks form:updated & form:field:updated

Two new modification hooks empower you to make alterations to forms and their fields if the modification is not specific to a single field being updated. Previously this was achieved using distinct field hooks.

Please refer to merge request #145 for more information.

  • Add field method AbstractEntityField::getPreviousValue()

Performing comparisons to the previous field value using a modification hook proved to be challenging, often resulting in situations where an if-statement within a form modification lacked certainty about whether a particular change should be applied.

Please refer to merge request #145 for more information.

Changed

  • Upgraded Magewire dependency from v1.10.5 to v1.10.7

Please refer to merge request #145 for more information.

  • Creating typed input fields no longer requires an input data argument

When generating a field through form modifiers, it was necessary to include an argument containing an input key with the corresponding input type. This approach could be perplexing, given that the method inherently demanded the $type to be specified.
With this change improvement, the data type is automatically assigned if it is not specified.

Please refer to merge request #145 for more information.

  • Navigating backward via breadcrumbs bugfix

The default navigation button allowed backward navigation without validation. However, navigating backward using the breadcrumbs, the checkout process triggered validation, potentially preventing stepping backward to a previous step. Now the validation is bypassed when navigating to a previous step.

Please refer to merge request #140 for more information.

Many thanks to Marcus Venghaus for the contribution!

  • Moving wire:key from the field to its wrapper element

Previously, Magewire faced issues in tracking changes made by form modifiers when the wire:key attribute was assigned to the innermost element of a field renderer template. To address this, the key is now placed on a wrapper element.
By relocating the key, Magewire is able to accurately understand where to perform DOM morphing. This change resolves a scenario where a text input was transformed into a select input during subsequent requests.

Please refer to merge request #143 for more information.

  • Form field mutation check bugfix

Preiously checking for a difference between the current address values and the updated ones would not work with null values.

Please refer to merge request #144 for more information.

  • Checkout JS API: Fixed a missing config object on validation exception

Please refer to merge request #147 for more information.

  • Checkout JS API: Now works with the Magewire loader plugin

The events loader:start and loader:stop no longer are dispatched to start and stop the loader.
Instead, methods on the Magewire loader are called directly. The events are still dispatched, but now from within Magewire.

Please refer to merge request #148 for more information.

Removed

  • Nothing removed.

1.1.1 - 2023-07-25

Added

  • Form field checkbox type template

When creating and adding a form field of type checkbox, the checkbox field rendering view was missing. Now, a dedicated checkbox template is available with the option to also render option relatives.

Please refer to issue #144 for more information.

Many thanks to Filipe Bicho (Refusion) for the contribution!

  • Emit event Address Submitted now carrying the save result

Previously, you could listen for a shipping_address_submitted or billing_address_submitted emit event without knowing if the save was successful or returned false.
Now, an emit carries the save result giving developers the option to change course based on it.

Please refer to issue #139 for more information.

  • Main component redirect template on order place completion

There are situations where the Main component is trying to rerender itself despite the quote now being an order.
Because of not having the quote object, the component relying on it would possibly break. Therefore, when the PlaceOrderService finishes the order with a redirect, the main component will render with a template notifying the customer about the redirect.

Please refer to issue #122 for more information.

Many thanks to Francesco Marangi (Y1) for the contribution!

  • Form element label renderer

Previously each element renderer needed to implement its own hard-coded label HTML creating inconsistency, bad maintainability and not being able to swap a label HTML without rewriting a form element renderer. Therefore a label template has been introduced used as the default element label renderer.

Please refer to issue #142 for more information.

Many thanks to Tjitse Efdé (Vendic) for the contribution!

  • Shipping- & Billing street grid renderer (optional)

Depending on the street width configuration and checkout developer settings, a new street field renderer will show street fields in a two-column grid instead of the default, where ancestor relatives are rendered underneath each other.

Please refer to merge request #133 for more information.

  • Added missing en_US translations

Please refer to issue #117 for more information.

Changed

  • Fix PSR-autoload standard issue

The class Hyva\Checkout\Model\Form\EntityField\Primary has been renamed to Hyva\Checkout\Model\Form\EntityField\PrimaryKey which matches the file name.

Please refer to issue #141 for more information.

Many thanks to Gérald CANN (Sdkweb) for the contribution!

  • Improved default styling consistency

The default checkout(s) now are closer to the Hyvä Theme styling having a more consistent look and feel over the entire store.

Please refer to issue #116 for more information.

Many thanks to Sean van Zuidam (Siteation) for the contribution!

  • Fix to show a different address book view for billing addresses

Previously the billing address book view listened for the shipping address book view setting making it not possible to define a different look and feel. This has been fixed and the view now uses its own config setting.

Please refer to issue #115 for more information.

  • Creating a form field without a predefined class

Previously creating a form field without a predefined class in di.xml was not possible. Now, a form field can be created by giving it a name, some arguments, and an input type resulting in a field using a default implementation of Hyva\Checkout\Model\Form\EntityField\AbstractEntityField.

Please refer to issue #143 for more information.

Many thanks to Thijs de Witt (Trinos) for the contribution!

Removed

  • Nothing removed.

1.1.0 - 2023-07-10

Added

  • Form modification listener API

This new API allows for a wide range of customizations to checkout address forms.
It allows callbacks to be triggered when form field values are changed, and modify the form based on it.

Please refer to the form customization documentation for more information.

  • Grouping of form fields

A form field can now be assigned as related to another field.
This causes the fields to be rendered together, as well as the values to be combined in an array (for example, the street fields use this).

Please refer to the form customization documentation for more information.

  • New checkout emit messages

A couple of new checkout emit messages have been added.

Please refer to the form customization documentation for more information.

Changed

  • Fix checkout for new customers with downloadable product or virtual product

Previously this resulted in a stack-trace.

For more information, please refer to issue #48.

Many thanks to Dung La (JaJuMa) for the contribution!

  • Fix unchecking "My billing and shipping address are the same"

Previously this caused an address to be rendered as only ,,,,,,,.

For more information, please refer to issue #130.

  • Require Magewire 1.10.5

This change requires the latest version of Magewire.

For more information, please refer to merge request #116.

  • Add referer information to log-in and create an account links

This allows customers to be correctly redirected back to the checkout after logging into their account.

For more information, please refer to merge request #117.

  • Fix typo in CSS class

In the template src/view/frontend/templates/breadcrumbs.phtml, the CSS class nav-braincrumbs now is correctly spelled nav-breadcrumbs.

For more information, please refer to merge request #117.

Removed

  • Removed classes, interfaces, methods, and properties

A number of classes, interfaces, methods, and properties were removed.
However, we do not expect this to impact any customizations of Hyvä Checkout.

Removed classes:

- `\Hyva\Checkout\Model\Form\EntityField\Renderer\Regular` (replaced by `\Hyva\Checkout\Model\Form\EntityFormElement\Renderer\Element`)
- `\Hyva\Checkout\Model\Form\EntityFormFieldsFilterInterface` (no replacement as it was never used)

The removed properties and methods are not listed here.
Please refer to the backward compatibility breaking changes in 1.1.0 document for details.

1.0.7 - 2023-06-19

Added

  • Nothing added.

Changed

  • Require Magewire 1.10.4

From this release forward, Hyvä Checkout releases will depend on a specific Magewire version.
This will improve reliability and make future upgrades less complex.

For more information, please refer to issue #125

  • [Bugfix] Add missing resolver argument in di.xml to process hyva_checkout.xml

This change fixes a regeression introduced in release 1.0.6.
The issue caused additional hyva_checkout.xml files not to be evaluated.

For more information, please refer to issue #126

  • [Bugfix] Add missing check if nested JS object property is set

The missing check could result in an error Cannot read property of undefined (reading 'id').

For more information, please refer to issue #123

Removed

  • Nothing removed.

1.0.6 - 2023-06-09

Added

  • Added Customer Address selection list view

The default address selection with grid tiles was not ideal for stores where customers tend to have a lot of records in their address book.
The list view address selection can be configured for a checkout in the system configuration at Components > Shipping and Components > Billing.

For more information, please refer to issue #64 and the referenced merge requests.

Changed

  • Display shipping totals in checkout with VAT

Previously, the shipping totals were missing VAT if configured.

For more information, please refer to issue #56.

Removed

  • Nothing removed.

1.0.5 - 2023-06-01

Added

  • Allow saving of billing address to customer address book

Previously this was only possible for shipping addresses.

Please refer to issue #83 for more information.

  • "Weee tax" order totals renderer

Please refer to issue #100 for more information.

  • Option to add a subtitle and SVG logo icon to a Payment method

It is now possible to add additional display information to payment methods using layout XML as "metadata".
For now, a subtitle and a payment provider logo SVG icon can be added. Additional properties might be added in the future.

Please refer to issue #98 for more information.

  • Navigation button now can have nested elements

This feature allows adding DOM elements, for example, SVGs, inside the navigation buttons.

Please refer to issue #95 for more information.

  • Enable the Hyvä Checkout cache by default

After running bin/magento setup:upgrade for the first time after installing the Hyvä Checkout 1.0.5 or newer, the checkout cache will be automatically enabled.

Please refer to issue #91 for more information.

Changed

  • Fix phrase "No shipping address set." to "No shipping method selected." when no shipping method is selected

Please refer to issue #25 for more information.

  • Improve Discount Code component default styling

We have tried to make the coupon code component less prominent, in other words, less visibly apparent. Both the field and the apply button are now responsive to smaller viewports sizes.

Please refer to issue #101 for more information.

  • 2- and 3-columns checkout layout breakpoint revision

Previously, the 2- and 3-column layout would break on medium-sized screens, but now it has been changed to break on large screens instead. This change ensures better visibility on smaller screen sizes, such as mobile or tablet devices.

Please refer to issue #101 for more information.

  • Default email sort order for shipping and billing form fields

The email field will now have a default sort order to be rendered as the first field for both the shipping and billing address forms.

Please refer to issue #109 for more information.

  • Fixed an issue where it would not render a custom cart item type renderer when it was set via layout xml

Please refer to issue #110 for more information.

Removed

  • Nothing was removed.

1.0.4 - 2023-05-17

Release 1.0.1 included a default totals renderer, which caused a lot of issues. We announced in the Slack support channel that the default totals renderer will be removed again in the next release. Now every total that needs to be rendered must be declared in layout XML as a child block of price-summary.total-segments. The block alias must match the total code, as in as="discount".

Added

  • Address & Country change listeners for the payment method list

By default, when an address is changed or a country is selected, the payment methods were not refreshed, potentially leading to situations where payment methods needed to be displayed or hidden based on changes in the shipping or billing address.

Please refer to merge request #55 for more information.

Many thanks to Francesco Marangi (Y1) for the contribution!

  • Add checkout page type as widget instance target location

Please refer to issue #89 for more information.

  • Narrowed down the Composer PHP requirement between 7.4 and 8.3

Please refer to issue #88 for more information.

  • Checkout (Magewire) Component Resolver sort order

You now possess the capability to decide whether your custom checkout component resolver should execute before or after the core checkout component resolver. Previously, achieving this required utilizing a negative sort order in the DI.xml file. However, you can now employ positive numeric values to precisely specify the desired position.

Please refer to merge request #74 for more information.

Changed

  • Fix scrolling in terms agreement dialog when the content exceeds page height

On certain screen sizes, it was not possible to scroll within a terms agreement dialog when it was opened with a context that exceeded the height of the screen. As a result, customers were unable to close the dialog since they were unable to scroll to the bottom.

Please refer to merge request #66 for more information.

Many thanks to Mitchel van Kleef (Made by Mouses) for the contribution!

  • Fix for using the undeclared function 'array_first'

Please refer to merge request #93 for more information.

Many thanks to Adam Crossland (ZERO-1) for the contribution!

  • Empty Billing Address Form Replaces Pre-Filled Shipping Data

Previously, a new guest billing address form would appear with pre-filled shipping address data that could be modified. However, it has now been updated so that the billing address form opens empty, without any pre-existing information.

Please refer to issue #81 for more information.

Removed

  • Removed the default total segment renderer (block) and its fallback mechanism

In merge request #44, a default total segment renderer was implemented to ensure that items are always rendered without the need to manually add the necessary block into the Layout XML. However, this led to unintended behavior by rendering items that should not be rendered, without providing the option to remove them, as it would default to the standard rendering.

Please refer to issue #87 for more information.

1.0.3 - 2023-05-09

Added

  • Nothing was added.

Changed

  • Fix checkout layout resolver to only match on checkout route

The layout resolver fix introduced in 1.0.2 matches any page on a store with Hyvä Checkout, causing non-checkout pages using Magewire to break.

Please refer to issue #58 for more information.

Many thanks to Marcus Venghaus for the contribution!

Removed

  • Nothing was removed.

1.0.2 - 2023-05-02

Added

  • Nothing was added.

Changed

  • Fix unresolvable nested components

Components that were dynamically loaded without a page reload or step navigation became unresolvable since the Hyva Checkout component ResolverInterface was unable to comply with its conditions and therefore would fallback on the default Magewire Layout ResolverInterface, which isn’t aware of any additional checkout/step layout handles. Because of this, Blocks couldn’t be found which result in Magewire throwing a 404 - component not found.

For more information, please refer to merge request #57.

Many thanks to Ivascu Madalin (Buckaroo) & Filipe Bicho (Refusion) for the contribution!

Removed

  • Nothing was removed.

1.0.1 - 2023-05-02

Added

  • Compatibility with PHP 8.2

For more information, please refer to issue #35.

  • Default totals renderer

Previously, custom totals where not rendered, unless they where explicitly added as a child to the price-summary.total-segments block with the total code as the block alias.
Now, if there is no child matching the total modal, the default renderer is used rendering the total code and value.

For more information, please refer to issue #37.

Many thanks to Marcus Venghaus for the contribution!

Changed

  • Fix shipping total rendering

Previouly the shipping total was not shown because the block was missing the as="shipping" attribute in the layout xml, so it was rendered using the default total renderer instead.

For more information, please refer to merge request #48.

Many thanks to Thijs de Witt (Trinos) for the contribution!

  • Changed the checkout cache ID from checkout to hyva_checkout

This low impact change was made to avoid potential cache key name collisions with other extensions or possible future Magento core changes.

For more information, please refer to merge request #48.

  • Change type of Phone number field from "text" to "tel"

This change can improve the keyboard layout on mobile devices when entering a value.

  • Session expiration Alert popup message

When a customer session expires while idling for a long time during checkout, a informative message is displayed rather than an error message.

  • Fix validation error for newly registered customers without address in address book

Previously, customers who had just created an account and tried to checkout where unable to place an order because the billing address was not properly initialized on the quote.

For more information, please refer to issue #55.

Many thanks to Jacek Lopuszynski for the contribution!

  • Fix coupon code component being incorrectly disabled

For more information, please refer to issue #50.

Many thanks to Marcus Venghaus for the contribution!

  • Update README to refer to the correct composer package names

Previously old package names used during development that are no longer valid where referenced in the README file.

For more information, please refer to issue #43.

  • When a customer address is deleted, the address ID is removed from the quote

Previously an exception was thrown when the address ID on the quote referenced a non-existing customer address.

For more information, please refer to issue #39.

Many thanks to Marcus Venghaus for the contribution!

  • Update the price summary after changing the payment method

Some payment methods like cash on delivery have an effect on the price summary.

For more information, please refer to issue #36.

Many thanks to Marcus Venghaus for the contribution!

  • Fix possible bypass of required form fields

For more information, please refer to issue #24 and merge request #49.

  • Fix issue with Magewire loading spinner remaining visible after session timeout

For more information, please refer to issue #5.

  • Handle session corruption because of cookie domain conflicts more gracefully

In the rare situation, where the main store is running on a second level domain (e.g. test.com),
and the staging environment was running on a subdomain of the same domain (e.g. staging.test.com),
the main store cookie conflicted with the subdomain cookie, resulting in lost sessions.
This caused a problem where the checkout was trying to collect Magewire components based on data of the main domain when on the subdomain.

For more information, please refer to issue #42.

  • Select inputs like COUNTRY_ID will now wait to update when a user starts typing

For more information, please refer to issue #34.

  • Magewire error alert overlay is now hidden in production mode

For more information, please refer to issue #21.

  • Make system configuration for shipping and billing form management more user-friendly

For more information, please refer to issue #7.

  • The default checkout login step now uses the 1column "layout"

Removed

  • Nothing was removed.

1.0.0 - 2023-02-24

Added

  • Initial Release

Changed

  • Nothing was changed.

Removed

  • Nothing was removed.