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

fix: add authenticatedpageroute so learner can create a shared record link #187

Merged
merged 2 commits into from
Sep 29, 2023

Conversation

jsnwesson
Copy link
Contributor

@jsnwesson jsnwesson commented Sep 29, 2023

Description:

Resolves the bug APER-2606: Learner unable to create public record without reauthenticating

When the learner attempted to create a public record link, their clipboard copied the private URL and they weren't able to create a public URL unless they re-authenticated. This PR wraps the ProgramRecordsList, ProgramCertificatesList, and the private version of ProgramRecord with AuthenticatedPageRoute, which allows for the user to experience a redirect "to the login page when the route becomes active and the user is not authenticated" source.

Note that the public view of ProgramRecord is not wrapped in the AuthenticatedPageRoute. This route needs to not be wrapped so that non-learners are able to access the public record via shared URL.

@codecov
Copy link

codecov bot commented Sep 29, 2023

Codecov Report

All modified lines are covered by tests ✅

Comparison is base (22e2671) 69.60% compared to head (2479538) 69.60%.
Report is 3 commits behind head on master.

Additional details and impacted files
@@           Coverage Diff           @@
##           master     #187   +/-   ##
=======================================
  Coverage   69.60%   69.60%           
=======================================
  Files          27       27           
  Lines         408      408           
  Branches       90       90           
=======================================
  Hits          284      284           
  Misses        123      123           
  Partials        1        1           
Files Coverage Δ
src/index.jsx 0.00% <ø> (ø)

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@@ -29,7 +29,7 @@ subscribe(APP_READY, () => {
<Routes>
<Route
path={ROUTES.PROGRAM_RECORDS}
element={<ProgramRecordsList />}
element={<AuthenticatedPageRoute><ProgramRecordsList /></AuthenticatedPageRoute>}
Copy link
Member

@MaxFrank13 MaxFrank13 Sep 29, 2023

Choose a reason for hiding this comment

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

I was under the impression that the AuthenticatedPageRoute component was actually a react-router Route of its own. This is indicated in the docs, HOWEVER, the implementation used in frontend-platform test files just uses it as a wrapper (like this PR does).

When digging into the code, I don't see anywhere that AuthenticatedPageRoute would ever return an actual Route component. See the code in frontend-platform.

What's strange is that there ARE implementations where MFEs are adding props like path and component to the AuthenticatedPageRoute component. See here in frontend-app-learner-portal-enterprise.

All of this to say, this PR is clearly fine but I'm also clearly a little confused so will be bringing this to fedX group to hopefully get some clarification on how this component is intended to be used.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Hey thanks for bringing in all of these PR examples! Very valid point in terms of implementation. Originally I did try replacing the Route element with a AuthenticatedPageRoute, but then an error appeared:

[AuthenticatedPageRoute] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>

This must be a hard requirement for frontend-platform v5, and previous PRs might need to be updated to reflect this rule.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

One other thing to note is that the comments in the docs is from 4 years ago (found via git blame), so it should be updated to better represent its implementation.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

And lastly, it looks like the implementation in frontend-app-learner-portal-enterprise has placed the routes directly into App.jsx (and not wrapped with a Routes element), and this was done over two years ago. And they're still using frontend-platform v4.

So from that, I think that AuthenticatedPageRoute once had served as a substitute for Route, but it no longer does in v5.

@jsnwesson jsnwesson merged commit 2bcbd6a into master Sep 29, 2023
8 checks passed
@jsnwesson jsnwesson deleted the jwesson/program-record-authenticate-route branch September 29, 2023 19:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants