Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

126 add error handling mechanism to the UI #518

Open
wants to merge 8 commits into
base: develop
Choose a base branch
from

Conversation

ChengShi-1
Copy link
Contributor

@ChengShi-1 ChengShi-1 commented Oct 4, 2024

What this PR does / why we need it:

In some cases, unexpected errors may occur in the application. To manage these effectively, we need a consistent error-handling mechanism in the UI. This not only ensures that error messages are displayed to users on the page but also enables developers to track errors by viewing detailed messages in the console.

Which issue(s) this PR closes:

Special notes for your reviewer:

The error page didn't do component test and e2e test.
Component test: we log errors using the hook useRouteError, which must be used within a data router. However, the component test used memory router.
e2e test: we didn't find a way to throw an error in the test environment to trigger the page. Cypress always caught the errors we throw.

Suggestions on how to test this:

Step 1: Run the Development Environment

  1. Execute npm i.
  2. Navigate with cd packages/design-system && npm run build.
  3. Return with cd ../../.
  4. Ensure you have a .env file similar to .env.example, with the variable VITE_DATAVERSE_BACKEND_URL=http://localhost:8000.
  5. Navigate with cd dev-env.
  6. Start the environment using ./run-env.sh unstable.
  7. To verify the environment, visit http://localhost:8000/ and check your local Dataverse installation.

Step 2: Test the feature
Since we could only test it manually, please edit some codes in Dataverse-frontend repository.

  1. Inside dataverse-frontend/src/sections/homepage/Homepage.tsx or any other children routes, we could add a line throw new Error('This is an error') before returns.
  2. check if the error messages are printed in the console
  3. check if the error page UI is shown correctly, with the header and footer
  4. check if the button, header and footer work well

Does this PR introduce a user interface change? If mockups are available, please link/include them here:

image

Is there a release notes update needed for this change?:

No

Additional documentation:

@ChengShi-1 ChengShi-1 linked an issue Oct 4, 2024 that may be closed by this pull request
@coveralls
Copy link

coveralls commented Oct 4, 2024

Coverage Status

coverage: 97.346% (-0.2%) from 97.53%
when pulling 1bc573e on 126-add-error-handling-mechanism-to-the-ui
into ff8ed38 on develop.

@ChengShi-1 ChengShi-1 marked this pull request as ready for review October 4, 2024 15:38
Copy link
Member

@pdurbin pdurbin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a drive-by comment about brand name. 😄

src/sections/error-page/ErrorPage.tsx Outdated Show resolved Hide resolved
@ChengShi-1 ChengShi-1 added FY25 Sprint 7 FY25 Sprint 7 (2024-09-25 - 2024-10-09) Size: 3 A percentage of a sprint. 2.1 hours. SPA.Q3 Not related to any specific Q3 feature UI Tasks related to the user interface (UI) or frontend development GREI Re-arch GREI re-architecture-related pm.GREI-d-2.7.1 NIH, yr2, aim7, task1: R&D UI modules for creating datasets and supporting publishing workflows pm.GREI-d-2.7.2 NIH, yr2, aim7, task2: Implement UI modules for creating datasets and publishing workflows FY25 Sprint 6 FY25 Sprint 6 labels Oct 7, 2024
@ekraffmiller ekraffmiller self-assigned this Oct 7, 2024
@ChengShi-1 ChengShi-1 removed the FY25 Sprint 6 FY25 Sprint 6 label Oct 7, 2024
flex-direction: column;
align-items: center;
justify-content: center;
min-height: $main-container-available-height;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My two cents, min-height should be dynamic based on a prop.
This min-height is fine if we have the presence of the header and footer.
But if the error occurs at the layout level we will have neither header nor footer, causing the container height to not grow to the full height of the viewport, in that case the min-height should be 100vh I believe

ekraffmiller
ekraffmiller previously approved these changes Oct 8, 2024
Copy link
Contributor

@ekraffmiller ekraffmiller left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks good to me!

@ekraffmiller ekraffmiller removed their assignment Oct 8, 2024
const footer = document.querySelector('footer')
const newMinHeight = header && footer ? '$main-container-available-height' : '100vh'
document.documentElement.style.setProperty('--error-min-height', newMinHeight)

Copy link
Contributor

@g-saracca g-saracca Oct 9, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would avoid running natives javascript dom selectors to find elements by their tag name or even by a class name, these might change and might not even be the only ones you find.

Take a look at this, is from my lazy imports PR, see this tsx file and this scss one.

So then you only need to pass that prop to the ErrorPage on the root layout path object.


  {
    path: '/',
    element: <Layout />,
    errorElement: <ErrorPage fullViewport />,
    children: [
    ...rest

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK, I'll follow the example. Thank you!

@ekraffmiller
Copy link
Contributor

Sorry if I approved this prematurely, I thought it was ready for QA, but maybe I misread the ticket!

@GPortas GPortas added SPA.Q4 Not related to any specific Q4 feature and removed SPA.Q3 Not related to any specific Q3 feature labels Oct 9, 2024
@g-saracca g-saracca assigned g-saracca and unassigned g-saracca Oct 9, 2024
@g-saracca
Copy link
Contributor

Sorry if I approved this prematurely, I thought it was ready for QA, but maybe I misread the ticket!

Don't worry, is just that I left a comment without a formal review I think

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
FY25 Sprint 7 FY25 Sprint 7 (2024-09-25 - 2024-10-09) GREI Re-arch GREI re-architecture-related Original size: 3 pm.GREI-d-2.7.1 NIH, yr2, aim7, task1: R&D UI modules for creating datasets and supporting publishing workflows pm.GREI-d-2.7.2 NIH, yr2, aim7, task2: Implement UI modules for creating datasets and publishing workflows Size: 3 A percentage of a sprint. 2.1 hours. SPA.Q4 Not related to any specific Q4 feature UI Tasks related to the user interface (UI) or frontend development
Projects
Status: In Review 🔎
Development

Successfully merging this pull request may close these issues.

Add error handling mechanism to the UI
6 participants