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.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 Digital) 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 Details 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 Digital) 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 Digital) 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 Digital) 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 Digital) 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 Digital) 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.