O3 RefApp (QA Release) 3.1.1-rc release notes

Release notes for the 3.1.1-rc QA release

Core (v5.7.2)

  • Unified Workspace Component: 3.1.1-rc replaces the WorkspaceOverlay, WorkspaceWindow, and ActionMenu components with a unified WorkspaceContainer component. It rationalizes styles so that, for the most part, elements are only fixed 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 @bistenesPR 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

    en-u-ca-ethiopic

    Gregorian calendar

    gregorian-calendar-en

  • 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 the quantity, quantity units, and prescription 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 to false. 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, the OpenmrsDatePicker 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, and encounterDatetime 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 and personAtttribute fields.

  • Validation Rule Builder: Initial work on the Validation Rule builder for adding arbitrary conditional logic to form fields.

Docs

General

  • Remote Caching for E2E CI: Integration of remote caching into the E2E CI workflows in Patient Chart and Patient Management for faster builds. In Patient Management, the build job was sped up from 3 minutes to 2 seconds. In Patient 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 :slight_smile:

11 Likes