Concept Dictionary OWA 1.0.0-beta released!

I am happy to announce the release of the Concept Dictionary App in version 1.0.0-beta! It is an app for distributions using OpenMRS 2.x UI, which will eventually replace concept management pages from the 1.x UI.

The app requires the following modules to be installed: webservices.rest 2.14-SNAPSHOT, owa 1.4-SNAPSHOT, uiframework 3.6 and uicommons 1.7.

It is one of the first Open Web Apps for OpenMRS. It was developed using front-end tech stack exclusively, which means there is no server side code in it. It uses AngularJS 1.x and REST.

We started off using openmrs-owa yeoman generator to scaffold the project (hats off to @pascal who created it!).

The project uses npm and bower for dependency management and gulp for building (we’ll drop bower and gulp soon). We also employed travis-ci for testing and deploying releases (tags) to bintray.com. Codacy has helped us to track code quality and test coverage.

Alongside we’ve released openmrs-contrib-uicommons, which is a library of Angular components for OpenMRS Reference Application inc. openmrs-header, openmrs-breadcrumbs, but also css and fonts. The library is built using npm and webpack. Tags are published to npm by travis-ci.

I’ve been putting emphasis on the tools we used as they really helped us to stay productive when working on the project. The live reloading feature provided by browser-sync has probably boosted our productivity the most.

We had three solid contributors, who coded almost full time: @adamg (Adam), Paweł (@gutkowski) and Tomasz (@tmarzeion) (delegated by Soldevelo). None of them knew JavaScript and tooling when the project started and after 4 weeks they became quite experienced front-end devs!

@pascal and @darius have also contributed to the project, thanks!

There is still more work. Stay tuned for a separate announcement on getting the app to the final release!

9 Likes

:tophat: Well done @raff, @adamg, @gutkowski, @tmarzeion, @darius & contributors - outstanding work! :tada: :balloon:

1 Like

Congratulations !

ps: It blows my mind that the JS ecosystem needs 4 distinct tools for building. Good that at least 2 of them are dropped.

1 Like

For those who would like to try this out, here are some direct links to the requirements:

Modules

OWAs

Install the modules into the RefApp, then follow the OWA install instructions.

Screenshots

3 Likes

This is very exciting, and I’m looking forward to checking it out!

I’d like to specifically thank Soldevelo for contributing the developer time for this. I’d like to highlight that while various of us in the OpenMRS community have been talking about new development patterns on top of the new tools we’ve been building, this contribution of developer time was the key to empowering @raff to lead this team, spend the time necessary to tie together all the pieces, and demonstrate the power of this new paradigm.

So, thanks Soldevelo–we really appreciate this! I’d also be interested to know how Soldevelo thinks this engagement went, and hope they’d like to continue. I see a post from February, and I look forward to a followup.

Also, to other groups out there considering contributing developer effort to the OpenMRS mission, this is a stellar example of how to do that, and what it can lead to. :slight_smile:

4 Likes

First off, this was great! I love that I was able to spin up a server I had via the SDK, and add the OWA without needing to restart anything. I also love that this can add Index Terms to concepts. The API has supported this for 5+ years, but it has never been accessible through the UI!

Some random UI feedback as I clicked through it:

  • It’s not intuitive (to me) that the home icon in the breadcrumbs is just going to take you to the home screen of the app. I would expect it to go to /index.html of the whole OpenMRS application, and for there to be an extra level of breadcrumb to represent the app’s homepage.
  • “Delete forever” (i.e. purge) is supposed to be a rarely-done and destructive operation. I don’t think it should be available on the “list all xyz” pages. You should only be able to do it when viewing a single item, and the button should be somewhere that makes it a bit hard to accidentally click. And purge absolutely needs to have a modal confirmation, since this operation cannot be undone.
  • Sorting isn’t done (at least on Concept Classes) is not done correctly. It should be (a) retired before non-retired, and (b) sort alphabetically (ignore case). It seems like it’s currently sorting by dateChanged.
  • When creating a new Concept Class, the submit button is not tab-selectable.
  • “ConceptSource.hl7code” is not translated on the listing page (though it is on the create/edit page)
  • Change the wording from “Manage Concept Drugs” and “Concept Drug Management” to just “Manage Drugs” and “Drug Management”. (It was a mistake from the beginning of OpenMRS to call these “Concept Drugs” in the UI, because they are actually their own domain object.
  • Further, we should make the translations happen via transifex, and see how to incorporate that into the build pipeline of a javascript app
  • the “Combination” label when creating a new drug does not have < label for= >. (I haven’t looked at other, but try to get in the habit of always doing this for inputs.)
  • since ConceptDatatype are not actually editable, call it “View Concept Datatypes” (instead of Manage).
  • FYI, the UI that you copied for Concept Reference Terms is pretty terrible. (This is obviously not your fault!). We should completely redo, e.g. by having reference terms belong to a concept source, navigation-wise.
  • Editing a Concept Class does not show its retire information. It should (like Manage Concept Sources does).
  • For Concept Sources, I don’t like that you can retire something easily with a single click, but this doesn’t let you specify the reason, so this defaults to “web service call”, which a real user would find confusing if they ever looked. My recommendation is that clicking the retire button brings up a modal dialog with a retire reason field automatically focused, so the user can quickly type something, and press enter.
  • When I save a concept source, the alert says “Made up has been saved…” I suggest putting quotes around the name so it’s obvious what was user-entered, and what was part of the message. (Also, there’s an extra period.)

PS- I’m happy that script injection doesn’t work:

4 Likes

Some issues from Your post has been fixed:

1 Like

This is great work @raff and the Soldevelo team! Please keep the fire burning!!! :smile:

This is good @raff and team I am wondering though why you needed to depend on snapshot version of the rest & owa modules? Wouldn’t be more desirable to depend on non-snapshot ones? Also what are you going to replace bower & gulp with?

@willa, we depend on snapshots since we fixed some bugs in those modules, which still need to be released. We can’t run the app without those fixes.

We’ll get rid of bower & gulp and use npm + webpack.

1 Like

What is the benefit of using webpack over bower & gulp other than the obvious one of having less number of tools to maintain.

Thanks @darius for testing. We were aware of some issues and we missed some. We’ll hopefully address them all in the coming sprint.

Sorry, i have been late to this. I plan to review as soon as I can. I downloaded the standalone and modules and will try to get it up and running shortly so that I can provide feedback. Andrew S. Kanter, MD MPH FACMI

Asst. Prof. of Clinical Biomedical Informatics and Clinical Epidemiology Columbia University

@akanter, since you’re time-limited, you can probably wait until the next release before testing. This is more of a tech proof of concept, but the UI is still pretty raw (including not being able to edit concepts, only create new ones).

1 Like

OK, let me know when I should download and provide feedback (as I am one of the primary users)