Release notes for the 3.1.1-rc QA release
Core (v5.7.2)
-
Unified Workspace Component:
3.1.1-rc
replaces theWorkspaceOverlay
,WorkspaceWindow
, andActionMenu
components with a unifiedWorkspaceContainer
component. It rationalizes styles so that, for the most part, elements are onlyfixed
at the top level - their contents are relatively positioned within fixed containers. This allows for coherent behaviour in all of the rendering permutations, including:- As an Overlay or a Workspace
- With Sidebar or Bottom Nav or not
- In LTR or RTL locales
Previously, the Overlay was incompatible with sidebars, while workspaces required them. New paradigms, such as in the Ward app, necessitate rendering an Overlay with a sidebar. This refactor also allows for wonderful simplification of workspace styles: workspaces no longer need to set their height to anything other than
100%
. The workspace container will provide a correctly sized div for workspaces to render themselves into. This means that we can get rid of those--desktop-workspace-window-height
and--tablet-workspace-window-height
CSS variables. The net effect is that the workspace API becomes simpler and more robust. Check out @bistenes’ PR to see videos of the Overlay and Workspace components in action in both RTL and LTR locales. -
Custom Date Picker:
3.1.1-rc
ships a custom date picker component that is a drop-in replacement for the Carbon datepicker. It has improved localization and internationalization capabilities, with support for 13 calendar systems out of the box, including Gregorian, Buddhist, and Ethiopic calendars. It’s implemented using React Aria, the unstyled version of Adobe’s React Spectrum date picker component with Carbon styling layered on top. See @ibacher’s initial PR here for more details.Ethiopic calendar
Gregorian calendar
-
CarbonMRS Icons:
3.1.1-rc
ships the CarbonMRS icon set, a drop-in replacement for most Carbon icons. It also ships a set of pictograms that can be included in page headers. There are also some savings in bundle size from optimizing the source SVG files using svgo-loader. Read through @ibacher’s initial PR for more details.
Patient Chart (v8.1.0)
-
Medication Order Validation:
3.1.1-rc
introduces a new global property,requireOutpatientQuantity
that helps align medication order logic on the client with backend validations. When truthy, this property requires thequantity
,quantity units
, andprescription refills
fields to be filled for medication orders in an outpatient setting. Implementers can toggle this requirement off by setting the global property’s value tofalse
. Read through @mccarthy’s PR here to understand the rationale behind the change and to see videos of the new logic in action. -
Patient Identifier Stickers: Following on from @deb 's GSOC project on implementing the ability to print content in O3, @jnsereko worked on adding initial support for printing patient identifier stickers at the registration desk, showcasing the Patient ID, names, age, and gender. This work is based on the Patient Identification Stickers talk post @michaelbontyes published here.
3.1.1-rc
ships an initial version of this functionality in the Patient Banner that’s currently scoped behind a feature flag. Read through Joshua’s PR here to learn more about the implementation. -
Multiple Images in Visit Note: Users can now upload multiple images in the Visit Note form. See how this works in @jwnasambu’s PR here.
-
Program Enrolment Eligibility: Improved the program enrolment eligibility logic to show clear warnings when a patient is already enrolled in all available programs. It’s now also possible to re-enrol patients in programs they were once enrolled in but have since completed.
-
Lab Order Workspace: Improvements include the removal of duplicate test types and enhancements to the test types search.
-
Non-coded Causes of Death: It’s now possible to record non-coded causes of death in the
Mark Patient Deceased
form.
Patient Management (v7.1.0)
-
Ward App: Work on the Ward management app has begun following the design handoff by @Sonder to the @Mekom and PIH teams after a round of user acceptance testing. The Ward app is now part of the Patient Management repo, and modifications to the workspace API and EMR API backend module are ongoing to support the new designs.
-
Locale-aware date picker: The
Date of Birth
field in the Patient Registration form now leverages the OpenmrsDatePicker component. Previously, theOpenmrsDatePicker
component was only used in the -
Service Queues Improvements: Introduced structure, typing, and validation for the queue table config schema, improving error messages.
-
Patient Registration Image Upload Fix:
3.1.1-rc
fixes an issue with saving a patient photo in the Patient Registration form. This was owing to a mismatch in the concept photo UUID imported from the styleguide config schema. -
Safer Session Storage updates: Work by @vasharma05 introduces stricter checks when writing values to
SessionStorage
, deleting nullish values instead of committing them. -
Various improvements to Appointments and Service queues.
React Form Engine (v2.1.0)
-
The date field now uses the
OpenmrsDatePicker
component -
Support for a standalone time picker based on the argument passed to the
datePicker
prop of the Date field. -
Revisions to the
calcGravida
expression helper function -
Support for the
conditionalAnswered
validator -
Improved support for program workflows and program workflow states.
-
Support for
encounterRole
fields -
Various UI enhancements
Form Builder (v2.6.0)
-
New Question Types: Support for
patientIdentifier
,time
,datetime
, program workflow states,encounterRole
, andencounterDatetime
fields in the interactive builder. -
Person Attributes Editing: Support for editing person attributes via the interactive builder.
-
Drag-and-Drop Fix: Fixes for drag-and-drop functionality in the interactive builder.
-
Edit Functionality Improvements: Enhancements to the Edit functionality in Interactive Builder to support editing
encounterDatetime
andpersonAtttribute
fields. -
Validation Rule Builder: Initial work on the Validation Rule builder for adding arbitrary conditional logic to form fields.
Docs
-
New Recipes: Validating vanilla React forms using React Hook Form and Zod https://o3-docs.openmrs.org/docs/recipes/validate-forms-using-rhf-and-zod
-
Mocking Patterns Guide: For unit and integration tests https://o3-docs.openmrs.org/docs/frontend-modules/unit-and-integration-testing
-
Naming Conventions: Guidance around naming conventions for modals, workspaces, and extensions https://o3-docs.openmrs.org/docs/coding-conventions#naming
General
-
Remote Caching for E2E CI: Integration of remote caching into the E2E CI workflows in
Patient Chart
andPatient Management
for faster builds. InPatient Management
, the build job was sped up from 3 minutes to 2 seconds. InPatient Chart
, it went from 7 minutes to 7 seconds. -
Tooling Updates: Updates for dev tools like Turbo, React, and React types, setting the stage for the upcoming React 19 migration.
Next steps
- Once the remaining two or so issues from the QA release get fixed, we’ll promote this to our production demo server at https://o3.openmrs.org and begin work on the next release.
On the horizon
-
React 19 Migration: We’re preparing for the upcoming React 19 migration (once the new React compiler is stable), which will bring performance improvements and new features.
-
Carbon version upgrades: We’ve started work on upgrading Carbon to the latest version, which will bring new features and improvements to the design system.
-
Improvements to the testing infrastructure: We’re working on improving our testing infrastructure to make it easier to write and run tests. We’re also working on improving our E2E test coverage beyond happy path scenarios. This is all in a larger effort to make O3 more stable.
-
Implementer tools fixes to improve the user experience for implementers and developers.
-
Improvements to the OpenmrsDatePicker component.
-
New reusable page header component in the styleguide
-
Styling refactors to improve the consistency and maintainability of the codebase. These involve migrating import paths for Carbon components to the
@carbon
namespace and switching from the@import
syntax to the@use
syntax in SCSS files. -
Performance improvements to the React Form Engine following the migration from Formik to React Hook Form.
-
And more!
Attribution
Thanks to all the wonderful contributors who made this release possible! We couldn’t have done it without you