Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  1. Login, Register, Logout


    When you first run the website, you should be greeted with a Login screen. As you will not have an account yet, you can simply press “Create new account.” This will bring you to the registration page. You will enter an email, username, password and will also be asked to confirm your password. There will be alerts on the screen if any of these fields do not meet the guidelines. These can be found in /src/RegisterPage/RegisterPage.js and include ensuring the email is valid (using a built-in JS email validation package), ensuring the username is between 3-20 characters, ensuring the password is between 6-40 characters and that the passwords match. Any of this criteria can easily be changed if necessary. Once you hit create account, an API call will be made to register your account and save your information in the database. You can also coordinate with the back-end team to require certain formatting for the database entry as well. Right now, the only restriction the backend has is that no emails can be repeated as they are the primary key.

    After creating an account, the website will automatically take you to the login screen and display a message “Registered, please login.” You will also notice that there is a “Forgot Password” button on the login screen. This functionality has not been implemented yet. Now, you can sign in using the email and password you registered your account with. Another API call will be made to validate your input. If unsuccessful, you will see a message that you entered invalid credentials. Note: you should never reveal which field is incorrect on a web-app as it will make it easier to hack into accounts by narrowing down the errors. If your login attempt is successful, you will be greeted by the “Dashboard Home” page. Note that if you try to access the landing page without logging in, say by typing into your address bar “localhost:3000/admin”, you will be re-directed to “localhost:3000/login,” as this is a restricted route. This was implemented using the PrivateRoute component found in /src/components/PrivateRoute.js.

    Once the dashboard redirects to the home page, you will be greeted by a welcome message and a logout button. Pressing the logout button will redirect the browser back to the login page. As I am typing this, there are issues with the CSRF token provided by the login API expiring. Therefore, the logout button right now does not make an API call but simply removes the user from the Local Storage. This logout function can be found in /src/services/AuthService.js and should be fixed as soon as the back-end problem is fixed.

    So now that we know what is happening in regards to the user experience, what is happening at the code level? The login, register and logout functionalities were implemented using Redux. Redux is a pattern and library for managing application state, using events called “actions.” It serves as a centralized store for state that needs to be used across the entire application, with rules that the state can only be updated in a predictable fashion. In addition to Redux, we also use Local Storage, React Router, Axios and React.js hooks. Local Storage is a type of web storage that allows JavaScript sites and apps to store and access data right in the browser with no expiration date. React Router is the standard routing library for React. It keeps your UI in sync with the URL. Axios is a library that helps us make http requests to external resources. Rather than explain in detail every file I added for this functionality (as it is a lot), I will provide a links to very similar examples that I found explained this topic very well: Example 1 and Example 2.

  2. Upload


    This component does not have functionality yet. If you navigate to the upload pagetab, you will see a Search Files Select File(s) button that allows the user to select a file from their computer. However, nothing will happen beyond thatNote that only csv files are supported. The goal of this component is to allows for allow researchers to upload their own observations collected in a CSV to the database. The website web portal will then display these observations in on the Visualize Page by making a GET call from the database.

  3. Visualize


    After selecting “Visualize Data” on the navigation bar, you will see a table with two tabs: Sample and Baby. These tables have been implemented using the “react-table” package and can be found in the /src/components/Tables folder. The data displayed in these tables currently is being pulled from a database. The API contains the following data from the survey responses: BabyID, SampleID, Color, Sick Days, GI Stress and many more. Let’s further discuss each table individually:
    1. Sample: The sample table displays data about each specific sample collected by mothers. The color values are extracted from the stool sample by researchers. There is an arrow on the left side of every row that allows the user to expand the row. In the expanded component, the user can see more detailed responses collected from survey forms.
    2. Baby: The baby table consolidates the sample data by Baby ID. The two columns displayed are Baby ID and Sample Count (number of samples for this particular baby). The expandable row for the table displays time plots of the metabolite and microbiome data. The x-axis for these graphs is the Sample ID for the corresponding baby. The y-axis remains the percent composition. Each line on the metabolite graph represents how that metabolite has changed from sample to sample while the microbiome graph represents how that microbe has changed from sample to sample. Since there are numerous lines on each graph, we thought it would be helpful to be able to eliminate them, one at a time. The user can simply click on the labels in the legend and the line will disappear. It can be pressed again to be shown once again. The label will be crossed out in the legend if it is not currently present on the graph.
    3. Demographics: The demographics table joins the results from the Infant Nutrition Onboarding and Infant Nutrition After Birth surveys from Qualtrics. To access these surveys, contact Prof. Johnson to add you to the survey and login to Qualtrics with through your Cornell credentials. The survey data is joined by baby ID which is retrieved from the backend given the email that is used in the survey. Not all of the Infant Nutrition Onboarding surveys have a corresponding Infant Nutrition After Birth survey.
    4. Summary Demographics: The summary demographics table takes some of the demographic information from the Qualtrics questions used in the surveys from the Demographics tab and gets the count of each answer choice.

...