Conditionally displaying Apps and Extensions

Several places in the Reference Application allow you to provide a logical expression that determines whether an App or Extension is displayed. (For example, require under Manage Apps, or Show If on Manage Forms.)

These allow the administrator to provide a snippet of JavaScript that will be evaluated against a given ContextModel that reflects the state of the app at that given time.

Where Conditional Includes are Supported

Home Page Apps

When adding an App to the home screen (see System Administration: Manage Apps) you have access to a require property, whose ContextModel contains sessionContext.

Example: (only shows this app if the user logged in with the Outpatient Clinic session location)

sessionLocation.uuid == '58c57d25-8d39-41ab-8422-108a0c277d98'

Hardcoding a specific uuid is not a good approach if you want your code to work across multiple OpenMRS implementations. A better approach would be to do this based on location tags, e.g. this app would only be available if the user logged in with a session location that has the "Admission Location" tag (on our demo server this would be Inpatient Ward or Isolation Ward).

hasMemberWithProperty(sessionLocation.tags, 'display', 'Admission Location')

To show a form if the logged in user has the Organizational: Nurse role, you would use the expression below: 

hasMemberWithProperty (user.roles, 'display', 'Organizational: Nurse')

Patient Summary and Visit Dashboard

The Patient screen has two list of available actions: one for General Actions, another for Current Visit Actions (if there is an active visit). When viewing a specific visit, you have access to Visit Actions. When you add a custom form (see Configure Metadata: Manage Forms) this is added as a Visit Action.

General Actions have patient available in the context.

Current Visit Actions and Visit Actions have patient and visit available in the context.

Example: (only show this form for inpatients)

visit.admitted

Helper Functions

hasMemberWithProperty(list, propertyName, valueToLookFor) ... true if any item in list has item[propertyName] == valueToLookFor

See this code for full details.

Available Properties

sessionContext

Properties available:

  • currentUser
  • currentProvider
  • sessionLocation

See this code for full details.

patient

Properties available:

  • uuid
  • person (see below)

See this code for full details.

person

Properties available:

  • uuid
  • birthdate
  • birthdateEstimated
  • gender
  • dead
  • deathdate

See this code for full details.

visit

Properties available:

  • uuid
  • active
  • admitted
  • startDatetimeInMilliseconds
  • stopDatetimeInMilliseconds
  • stopDatetime

See this code for full details.

More details for how this is put together.