Announcing Vendure v1.8
June 07, 2023
Codename: Montpellier
As we recently announced in our blog post on our new product roadmap, each minor release is now named after a city. This release is Montpellier, a beautiful city in the south of France rich in history, culture and boasting an enviable Mediterranean climate. It is also the location of Swile one of Vendure's largest users with a team of active contributors, including contributions to this release!
Upgrading from v1.x.x
This minor release contains no breaking schema or GraphQL API changes, so updating should be a matter of changing all @vendure/...
dependencies in your package.json file to 1.8.1
.
{
"dependencies": {
- "@vendure/admin-ui-plugin": "1.7.4",
- "@vendure/asset-server-plugin": "1.7.4",
- "@vendure/core": "1.7.4",
- ... etc
+ "@vendure/admin-ui-plugin": "1.8.1",
+ "@vendure/asset-server-plugin": "1.8.1",
+ "@vendure/core": "1.8.1",
+ ... etc
},
"devDependencies": {
- "@vendure/testing": "1.7.4",
+ "@vendure/testing": "1.8.1",
}
}
Also see the Updating Vendure guide for more information.
Draft orders
Draft orders allow your administrators to create an order on behalf of a customer via the Admin UI. Common reasons to create draft orders include:
Manually create an order when a customer calls or arrives in person
Creating an order on behalf of a customer for a quote-based workflow
Testing out promotions
A draft order is created using the new "create draft order" button in the Admin UI order list view.
From there you'll be taken to a screen from which you can populate the order with products and set the customer, shipping and billing details. Once complete, the order can transition to the ArrangingPayment
state from which a payment may be added.
Note:
the draft order feature works by defining a new state in the order state machine. If you have customized your order process, you may not see the "draft" options in the Admin UI. In this case, you must alter your custom order state definition to enable a transition from Created
to Draft
.
Rich text table & embeds support
The rich text editor used for product & collection descriptions now supports HTML tables as well as iframe embeds.
To insert a table, use the "insert" menu item in the rich text controls area. You will also notice that each "block" in the editor now features a context menu icon in the top left corner. Clicking this icon will bring up available actions for the given block. If the cursor is inside a table cell, then you will see table-related actions. All blocks also feature an "edit html" context menu item, which allows you to directly edit the block's HTML content.
Note that not all HTML tags are supported, but with this update we now support the <iframe>
tag, which allows you to embed videos and other interactive content directly into your descriptions.
Bulk Actions
You'll now notice that the products, facets & collections list views in the Admin UI feature checkboxes to allow you to select multiple items. Once selected, a new bulk action menu will become visible at the top of the list. This list contains context-aware actions that can be performed on the selected items, such as bulk deletion or assigning to other channels.
Furthermore, it is possible to define your own custom bulk actions, including custom UI components to control how they behave. This feature unlocks a whole world of possibilities including things like:
Sending multiple products to a 3rd-party localization service
Exporting selected products to csv
Bulk-updating custom field data
To find out more about how to create custom bulk actions, see our new Bulk Actions documentation page.
Channel assignment for Facet & Collection
Building on top of the new Bulk Actions feature, it is now possible to control assignment of facets and collections to other channels via the Admin UI.
If you have multiple channels set up on your Vendure server, you should see channel assignment options in the bulk actions context menu for products, facets and collections.
Promotion API improvements
Vendure's powerful promotions API has seen a couple of big additions:
First of all, we're launching a brand-new "side effects API" which can be used by PromotionActions to define additional behavior apart from just modifying the price. The motivating use-case was how to elegantly and robustly support the very common requirement of adding a free gift to an order. This is achieved by defining the new onActivate
and onDeactivate
functions on a PromotionAction, which perform the work of adding the free gift to the order when a promotion becomes active, and removing it once the promotion is no longer active.
A full code listing for this can be found in the new Free gift promotions example docs.
Note:
the new side effect API functions are marked as experimental
. Due to the rather complex nature of this mechanism, we want to provide a period of testing before we settle on a final API design. The current design will only change if it is found to be unworkable for some reason. Experimental APIs are a new initiative which allows us to ship new features faster for those developers who are happy to opt in to testing them out.
Secondly, all PromotionCondition & PromotionAction functions now have access to the associated Promotion
entity, which is passed as the final argument to the check
and execute
functions. This addition unlocks some more advanced types of promotions, for instance, where a particular promotion may only be applied to a single OrderLine.
Other notable changes
The Admin UI collection detail view now displays a full breadcrumb of the current collection, making it easier to find the context and jump to parent collections.
Numerous improvements have been made to the EmailPlugin: languageCode can now be overridden; custom EmailGenerators and EmailSenders are now injectable; the SMTP transport now supports the full range Nodemailer options.
The MolliePlugin now supports pre-selecting the payment method type, which can make for a smoother checkout experience for your customers.
The ElasticsearchPlugin has been optimized to use much less memory when performing a reindex operation.
Contributors
I'd like to thank the wonderful Vendure community who contribute their ideas, bug reports, and code to the project daily. This release includes code contributions by:
refactor(core): Use existing function to update product variant price (#1762)
feat(core): Pass order arg to OrderItemPriceCalculationStrategy and ChangedPriceHandlingStrategy (#1749)
fix(core): Export TranslatorService helper from core (#1826)
perf(elasticsearch-plugin): Reduce memory usage when deleting products (#1838)
perf(elasticsearch-plugin): Reduce memory usage when indexing products (#1839)
fix(create): Fix default migration path of scaffold (#1759)
feat(core): Add Facet/Collection Channel assignment mutations
fix(core): Password change checks pw validity (#1745)
fix(core): Fix delete order method when called with id (#1751)
fix(core): Order fixed discount considers channel pricesIncludeTax (#1841)
feat(email-plugin): Allow to override email language (#1775)
feat(core): Export prorate function (#1783)
feat(email-plugin): Use full Nodemailer SMTPTransport options (#1781)
fix(core): Persist customField relations in PromotionService (#1822)
fix(testing): Correctly apply beforeListen middleware on TestServer (#1802)
feat(payments-plugin): Add Mollie paymentmethod selection (#1825)
fix(core): 'productVariantId' in group statement is ambiguous (#1793)
Create your first commerce experience with Vendure in less than 2 minutes
Vendure is a registered trademark. Our trademark policy ensures that our brand and products are protected. Feel free to reach out if you have any questions about our trademarks.
Documentation
Newsletter
Get the latest product news and announcements delivered directly to your inbox.