Skip to content

Instantly share code, notes, and snippets.

@adityadeshlahre
Last active September 10, 2024 06:45
Show Gist options
  • Save adityadeshlahre/ee28a4c6100788ae23196e8e2394738f to your computer and use it in GitHub Desktop.
Save adityadeshlahre/ee28a4c6100788ae23196e8e2394738f to your computer and use it in GitHub Desktop.
[GSOC 2024] - Work Submission - OpenELIS Organization - Rewriting All JSP page -> React Js page

GSOC 2024 x OpenELIS Global [Final Work Sumbission]



Project Background | Goals

OpenELIS Global is open enterprise-level laboratory information system software tailored for public health laboratories. OpenELIS is used at a national scale in a variety of settings, from small general hospital labs, all the way up to national reference labs, and all sizes in between.

The project involved rewriting the Admin Page components from JSP (Jakarta Server Pages) to React.js, covering Admin Configurations, Management, and other operational pages. Previously, all pages followed an MVC (Model–View–Controller) architecture, making them non-user-friendly. Therefore, the UX needed significant improvement.

Eventually, all MVC Controllers were rewritten as REST Controllers (REST Endpoints), so now all routes return JSON as the response. Additionally, the routes were updated to accept JSON in the request body and perform the required actions according to the specified routes and functions.

My Contribution

For the past 12-13 weeks, I have been focused on migrating all Admin Pages to React.js (New UI) to enhance user-friendliness. Additionally, I integrated French translations across all pages, as OpenELIS is used globally. The previous JSP pages were poorly structured in terms of user experience, making the move to the new stack essential.

The backend code is strictly written in Java, using Spring Boot (web framework) and Maven (builder). The original MVC structure was followed throughout, but it was necessary to convert to REST Controllers (REST Endpoints) for the new release of OpenELIS 3.0. In this release, both the old and new UIs will be operational.

Current state of Project | What's Left

Currently, 80% of the pages have been completed. The remaining pages are fairly complex, but I see it as a good challenge to tackle and finish them. By the end of GSoC, I will ensure these remaining pages are completed.

Code [Merged]

Right now, in the codebase 25K Lines and 91 Commnits got merged. [10k Lines LEFT of OVERALL PR] approx

image

  • You can view all merged PR HERE
  • In Progress PR HERE
Pull Request Status
Patient Status Report Merged
BarCode Configuration Admin Page Merged
Provider Configuration Menu Page Merged
Organization Management Admin Page Merged
User Management Admin Page Merged
Batch Test Reassignment & Cancelation Page Merged
Test Notification Configuration Menu Page In Progress
Test Management Config Menu Page In Progress

Demo workflow video

Learning

  • Maven Project Building/Bundlers
  • Spring Boot (WEB FRAMEWORK) (initally started with JAVA then learned to perform POST/GET calls)
  • Shifting MVC controllers to Rest Controller (Get the desiered JSON Values)
  • Conditional rendering and Complex Rendering (using react JS)
  • State Management (On older version of react js)
  • Fixing other SETUP issues

Challenges

  • Debugging Different mode/level of LOGGER (Info/Debug)
  • Update Data/PUT/POST of JSON values
  • Handaling natorius users EDGE cases
  • Implementaion of workflow from old to new ui (we need to keep the same workflow)

Revelent Links


Thoughts

As we move forward in the real world, there's always room for improvement in every line of code. I want to extend my sincere thanks to my mentor, the organization admins, and the community members for their continuous support and assistance throughout this project. It has been an exciting journey working with this wonderful community, and I’ve gained so much from the experience. I would also like to thank Google for providing this incredible opportunity. Keep pushing code!

Thank you for reading.

@harm-gamer
Copy link

can you assign me this?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment