Broadleaf Microservices
  • v1.0.0-latest-prod

Unified Admin Release Notes for 1.10.12

Features & Enhancements

Support Node 20

This was a simple change to the node engines in the package.json to accept Node 20 after testing.

Support multiple routes mapped to the same path but with other distinct properties

Important
This relies on changes made to Admin Metadata Services 2.1.4 and Catalog Services 2.1.5.
Tip
To revert to the prior behavior, set VITE_METADATA_ROUTER_ALLOWMULTIPLEROUTESPERPATH=false.

This allows multiple routes to be mapped to the same path, e.g., /products, and be distinguished by some other property like scope or component ID. It will render the first match that is authorized to be seen rather than just the first match.

  • Added new multi-route rendering component, ComponentRoutes.

    • This component will use a new endpoint in AdminServices to read all of the metadata by component ID for the Routes matching a given path, e.g., /product. This endpoint can be changed using VITE_METADATA_COMPONENTS_URL, which is /metadata/component by default.

    • It will check the permissions of each Route by their scopes and render the first one that is authorized and has metadata returned from the backend.

    • Overridable via blComponentRoutes key.

    • Internally uses new ComponentRouteRenderer to render the authorized and resolved metadata for the Route.

      • Overridable via blComponentRouteRenderer key.

  • Made pre-existing single route rendering components overridable:

    • ComponentRoute as blComponentRoute

      • This wraps ComponentRouteRenderer in a react-route Route

      • With the above changes, this will only be used if there is only one Route mapped to a path.

    • ComponentRouteRenderer as blComponentRouteRenderer

      • This handles resolving metadata for a Route and checking user access to it

  • Added support restricting routes by matching all scopes not just any

    • Using new scopeMatchType property on Route, taking values ANY and ALL. Default is ANY.

  • Support configuring a label for the customizable views of a business type using the _adminLabel attribute on the augmented metadata

Refactored styling for key layout components to use classnames and external stylesheets to enhance customizability

  • Added better semantic HTML tags for certain elements

    • To revert to using divs, set VITE_MAIN_LAYOUT_VERSION=v1

    • Marking the main content of the app in BaseLayout

    • Wrapping the main Navigation in nav

    • Using lists and list elements where appropriate

    • Using buttons on clickable components that are not links

    • Using section, header, and footer to better describe the organization of components

  • Added component name style classnames to various components of the Navigation and Header

    • Moved the tailwind utility classes to external CSS to take advantage of the cascading nature of CSS for easier overriding

    • Made the subcomponents of these overridable

Miscellaneous

  • Enhanced the existing logic for setting the nameLabel for custom attributes to place it at the FieldTypeRenderer level.

  • Added an additional status message to the SandboxRibbon that displays the total amount of changed items in a user’s sandbox across all entities.

    • The text also serves as a link that redirects to the My Changes page for the user.

  • Enhanced the Admin navigation menu sections to be able to be toggled open and closed by clicking on the menu section title.

  • Added support to AssetBrowserView for a default sort to be provided via metadata

  • Make the progress bar in FulfillmentViewDetails and the FulfillmentCardBody customizable via metadata.

    • A custom mapping of Fulfillment Statuses to Percentages can be provided via the fulfillmentStatusToPercentageMap metadata attribute. Otherwise, the default mapping based on the out-of-box fulfillment statuses will be used.

  • Enhanced EntityLongView component to include the parent ID of a nested component in the Formik initial values as part of the attributes.

  • Added new attributes to EntityGridView to support restricting visibility of grids to tenant-only, application-only, or specific application contexts.

    • tenantOnly: Boolean flag.

    • applicationOnly: Boolean flag.

    • restrictionApplications: Array of strings that are the IDs of the applications the grid is restricted to.

Bug Fixes

Miscellaneous

  • Fixed losing Application and Catalog context after cache timeout by using stale-while-revalidate caching strategy

  • Added validation for required fields in Add New Field Augmentation form

  • Fixed Workflow Orchestration Map in Workflow Details view

  • Fixed precision of matching Admin Navigation menu items based on the current route so that routes with similar names are not matched.

    • For example, /workflow should not match /workflows

  • Fixed bug where the Add New Field modal for modifying Business Type Create/Update forms could be submitted without required fields having any values — applied validation methods to all required fields.

  • Fixed bug where the Modify Update Form button does not display if the Business Type name contains the word create.

  • Fixed business type fields being clickable when form is disabled/read-only

  • Fixed instances where we were still using tw-shadow-outline instead of tw-ring

  • Added missing variant for motion-reduce

  • Fixed cases where we used transition or transform instead of tw-transition and tw-transform

  • Fixed some cases where we used group instead of tw-group

  • Added missing localizable message property for the User Settings dropdown in the header

    • Header.user-settings.label

  • Resolved an issue where Customer Segment Rules containing two or more rules with special characters (e.g., @, ., etc.) in their values were incorrectly displayed as a single concatenated string after saving and reviewing.

  • Fixed the behavior when selecting a new folder so that the Asset item filter and sort params are not cleared. Instead, these will be retained when switching folders.

  • Fixed an issue where the ApplicationSelector would fail to list all the applications if the number of applications exceeded the page size.

    • Introduced new TenantService#getApplicationsWithQuery method, which supports pagination with querying.

    • Modified the ApplicationSelector to fetch applications directly using the new method, instead of relying on the TenantContext.

  • Fix Default Application implementation to account for users with Tenant access but also have restricted applications & a default application ID assigned to them

  • Fixed issue where clicking only the text link of the My Profile button would redirect to the /my-preferences page — redirecting is now done at the dropdown item level instead of a child Link component

  • Fixed issue where ApplicationSelector was not allowing users to exit out of the default application

  • On mobile devices: Fixed the icon used to expand or collapse the navigation menu in the header to be the same height as the header. Previously it was slightly overhanding the header.

  • Fixed the sandbox ribbon messaging sometimes causing the main content to be pushed underneath the sidebar when the navigation menu was open.

    • The text will not be truncated rather than forcefully extending the ribbon’s width.

    • This usually only happened on tablet sized screens when many changes had been made to an entity in a sandbox.

  • Fixed Rule (SpEL) and Query (RSQL) builders not displaying values on initial modal render

    • The form state was not initialized immediately when the modal was opened, causing the Rule and Query builders to show blank values. To fix this, the modal now waits to render until the form state is initialized.