DHIS2 Test Project

This project was bootstrapped with Create React App and TailwindCSS. Here's the link to the app.

How to test the app

yarn test

Initial/Supposed implementation

  • Use TailwindCSS for styling - the DHIS2UI @types wasn't successfully installed via yarn; decided to use the next minimalistic framework there is!
  • Fetch the list of dashboards from the API on page load.
  • Fetch each dashboard data on click and save in a cache to avoid unnecessary endpoint(AJAX) requests.
  • Fetch the list of dashboards with the filter query on filter. (e.g.: /api/dashboards?type=map).
  • Call a PUT request to star a dashboard (this, of course, persists the starred dashboards in the database.).

Decisions

  • Fetch the list of dashboards from the API.

  • Also, fetch each dashboard's data and save it in a cache.

    Though this is expensive cause it makes a lot of AJAX calls at once. But since there are only 5 dashboards, this isn't all that expensive.

    This decision was made because the filtering was done in the frontend so we need all the data available in the UI.

  • Handle filtering from the frontend

    This approach was taken because of the unavailability of the endpoint.

    Utilized react.memo to cache components and avoid unnecessary re-rendering.

  • Include the star value (true or false) of each dashboard in sessionStorage to persist it on one's device.

  • Handle the starring of dashboards by updating the sessionStorage, cache, and dashboard state!

    This approach, even though it is a 3-step approach (updating cache, state, and sessionStorage), it's still a fast implementation as it would've been persisting on an actual database

Learn More

You can learn more in the Create React App documentation.

To learn React, check out the React documentation.