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

(feat) O3-2484: The application should revert to default locale on logout #782

Merged
merged 7 commits into from
Oct 29, 2023

Conversation

vasharma05
Copy link
Member

Requirements

  • This PR has a title that briefly describes the work done including the ticket number. If there is a ticket, make sure your PR title includes a conventional commit label. See existing PR titles for inspiration.

For changes to apps

If applicable

  • My work includes tests or is validated by existing tests.
  • I have updated the esm-framework mock to reflect any API changes I have made.

Summary

For an application having the default locale other than en (say 'km'), if the logged in user changes the locale to en, after the logout, the application's locale is set to en, instead of km. This PR resets the application to the default locale on logout.

Screenshots

Screen.Recording.2023-10-06.at.12.54.39.mov

Related Issue

https://issues.openmrs.org/projects/O3/issues/O3-2484

Other

@github-actions
Copy link
Contributor

github-actions bot commented Oct 6, 2023

Size Change: +203 B (0%)

Total Size: 2.84 MB

Filename Size Change
packages/shell/esm-app-shell/dist/openmrs.71e560b713fd3881.js 0 B -330 kB (removed) 🏆
packages/shell/esm-app-shell/dist/openmrs.a424f8f155c4b89e.js 330 kB +330 kB (new file) 🆕
ℹ️ View Unchanged
Filename Size Change
packages/apps/esm-devtools-app/dist/68.js 4.29 kB 0 B
packages/apps/esm-devtools-app/dist/735.js 2.63 kB 0 B
packages/apps/esm-devtools-app/dist/889.js 172 kB +13 B (0%)
packages/apps/esm-devtools-app/dist/988.js 282 B 0 B
packages/apps/esm-devtools-app/dist/main.js 2.95 kB 0 B
packages/apps/esm-devtools-app/dist/openmrs-esm-devtools-app.js 3.03 kB 0 B
packages/apps/esm-implementer-tools-app/dist/220.js 4.43 kB 0 B
packages/apps/esm-implementer-tools-app/dist/246.js 449 B 0 B
packages/apps/esm-implementer-tools-app/dist/263.js 6.66 kB 0 B
packages/apps/esm-implementer-tools-app/dist/319.js 633 B 0 B
packages/apps/esm-implementer-tools-app/dist/329.js 10 kB 0 B
packages/apps/esm-implementer-tools-app/dist/426.js 1.66 kB 0 B
packages/apps/esm-implementer-tools-app/dist/460.js 735 B 0 B
packages/apps/esm-implementer-tools-app/dist/466.js 5.85 kB 0 B
packages/apps/esm-implementer-tools-app/dist/499.js 2.87 kB 0 B
packages/apps/esm-implementer-tools-app/dist/500.js 2.83 kB 0 B
packages/apps/esm-implementer-tools-app/dist/519.js 400 B 0 B
packages/apps/esm-implementer-tools-app/dist/56.js 3.07 kB 0 B
packages/apps/esm-implementer-tools-app/dist/574.js 560 B 0 B
packages/apps/esm-implementer-tools-app/dist/575.js 713 B 0 B
packages/apps/esm-implementer-tools-app/dist/587.js 2.81 kB 0 B
packages/apps/esm-implementer-tools-app/dist/620.js 126 kB 0 B
packages/apps/esm-implementer-tools-app/dist/625.js 562 B 0 B
packages/apps/esm-implementer-tools-app/dist/640.js 32.9 kB 0 B
packages/apps/esm-implementer-tools-app/dist/657.js 562 B 0 B
packages/apps/esm-implementer-tools-app/dist/735.js 2.63 kB 0 B
packages/apps/esm-implementer-tools-app/dist/757.js 560 B 0 B
packages/apps/esm-implementer-tools-app/dist/788.js 42.9 kB 0 B
packages/apps/esm-implementer-tools-app/dist/807.js 1.45 kB 0 B
packages/apps/esm-implementer-tools-app/dist/833.js 681 B 0 B
packages/apps/esm-implementer-tools-app/dist/837.js 55.1 kB 0 B
packages/apps/esm-implementer-tools-app/dist/889.js 172 kB +12 B (0%)
packages/apps/esm-implementer-tools-app/dist/main.js 4.19 kB 0 B
packages/apps/esm-implementer-tools-app/dist/openmrs-esm-implementer-tools-app.js 3.31 kB 0 B
packages/apps/esm-login-app/dist/111.js 1.22 kB 0 B
packages/apps/esm-login-app/dist/126.js 2.5 kB 0 B
packages/apps/esm-login-app/dist/144.js 21.7 kB 0 B
packages/apps/esm-login-app/dist/173.js 1.22 kB 0 B
packages/apps/esm-login-app/dist/236.js 272 B 0 B
packages/apps/esm-login-app/dist/240.js 364 B 0 B
packages/apps/esm-login-app/dist/261.js 6.28 kB 0 B
packages/apps/esm-login-app/dist/263.js 6.65 kB 0 B
packages/apps/esm-login-app/dist/272.js 264 B 0 B
packages/apps/esm-login-app/dist/319.js 504 B 0 B
packages/apps/esm-login-app/dist/336.js 234 B 0 B
packages/apps/esm-login-app/dist/337.js 1.31 kB 0 B
packages/apps/esm-login-app/dist/342.js 11.6 kB 0 B
packages/apps/esm-login-app/dist/460.js 580 B 0 B
packages/apps/esm-login-app/dist/539.js 298 B 0 B
packages/apps/esm-login-app/dist/56.js 3.06 kB 0 B
packages/apps/esm-login-app/dist/574.js 428 B 0 B
packages/apps/esm-login-app/dist/610.js 5.84 kB 0 B
packages/apps/esm-login-app/dist/625.js 421 B 0 B
packages/apps/esm-login-app/dist/63.js 16.5 kB 0 B
packages/apps/esm-login-app/dist/644.js 305 B 0 B
packages/apps/esm-login-app/dist/673.js 284 B 0 B
packages/apps/esm-login-app/dist/735.js 2.63 kB 0 B
packages/apps/esm-login-app/dist/757.js 509 B 0 B
packages/apps/esm-login-app/dist/788.js 42.9 kB 0 B
packages/apps/esm-login-app/dist/807.js 685 B 0 B
packages/apps/esm-login-app/dist/829.js 10.2 kB +62 B (+1%)
packages/apps/esm-login-app/dist/833.js 528 B 0 B
packages/apps/esm-login-app/dist/889.js 172 kB +12 B (0%)
packages/apps/esm-login-app/dist/967.js 576 B 0 B
packages/apps/esm-login-app/dist/main.js 3.6 kB 0 B
packages/apps/esm-login-app/dist/openmrs-esm-login-app.js 3.28 kB 0 B
packages/apps/esm-offline-tools-app/dist/202.js 9.79 kB 0 B
packages/apps/esm-offline-tools-app/dist/206.js 7.41 kB 0 B
packages/apps/esm-offline-tools-app/dist/224.js 3.86 kB 0 B
packages/apps/esm-offline-tools-app/dist/263.js 6.66 kB 0 B
packages/apps/esm-offline-tools-app/dist/273.js 48.9 kB 0 B
packages/apps/esm-offline-tools-app/dist/281.js 16.3 kB 0 B
packages/apps/esm-offline-tools-app/dist/297.js 466 B 0 B
packages/apps/esm-offline-tools-app/dist/316.js 2.04 kB 0 B
packages/apps/esm-offline-tools-app/dist/319.js 1.15 kB 0 B
packages/apps/esm-offline-tools-app/dist/391.js 305 B 0 B
packages/apps/esm-offline-tools-app/dist/412.js 1.58 kB 0 B
packages/apps/esm-offline-tools-app/dist/460.js 1.32 kB 0 B
packages/apps/esm-offline-tools-app/dist/47.js 6.34 kB 0 B
packages/apps/esm-offline-tools-app/dist/501.js 24.2 kB 0 B
packages/apps/esm-offline-tools-app/dist/526.js 15.7 kB 0 B
packages/apps/esm-offline-tools-app/dist/538.js 6.79 kB 0 B
packages/apps/esm-offline-tools-app/dist/541.js 383 B 0 B
packages/apps/esm-offline-tools-app/dist/56.js 3.07 kB 0 B
packages/apps/esm-offline-tools-app/dist/574.js 1.05 kB 0 B
packages/apps/esm-offline-tools-app/dist/594.js 11.4 kB 0 B
packages/apps/esm-offline-tools-app/dist/625.js 1.04 kB 0 B
packages/apps/esm-offline-tools-app/dist/63.js 16.5 kB 0 B
packages/apps/esm-offline-tools-app/dist/696.js 410 B 0 B
packages/apps/esm-offline-tools-app/dist/733.js 290 B 0 B
packages/apps/esm-offline-tools-app/dist/735.js 2.63 kB 0 B
packages/apps/esm-offline-tools-app/dist/752.js 2.83 kB 0 B
packages/apps/esm-offline-tools-app/dist/757.js 1.22 kB 0 B
packages/apps/esm-offline-tools-app/dist/78.js 6.15 kB 0 B
packages/apps/esm-offline-tools-app/dist/788.js 42.9 kB 0 B
packages/apps/esm-offline-tools-app/dist/807.js 1.1 kB 0 B
packages/apps/esm-offline-tools-app/dist/833.js 1.23 kB 0 B
packages/apps/esm-offline-tools-app/dist/889.js 172 kB +11 B (0%)
packages/apps/esm-offline-tools-app/dist/937.js 6.61 kB 0 B
packages/apps/esm-offline-tools-app/dist/main.js 56.9 kB 0 B
packages/apps/esm-offline-tools-app/dist/openmrs-esm-offline-tools-app.js 3.31 kB 0 B
packages/apps/esm-primary-navigation-app/dist/241.js 14 kB 0 B
packages/apps/esm-primary-navigation-app/dist/263.js 6.66 kB 0 B
packages/apps/esm-primary-navigation-app/dist/319.js 200 B 0 B
packages/apps/esm-primary-navigation-app/dist/460.js 217 B 0 B
packages/apps/esm-primary-navigation-app/dist/574.js 183 B 0 B
packages/apps/esm-primary-navigation-app/dist/575.js 441 B 0 B
packages/apps/esm-primary-navigation-app/dist/625.js 184 B 0 B
packages/apps/esm-primary-navigation-app/dist/63.js 16.5 kB 0 B
packages/apps/esm-primary-navigation-app/dist/674.js 680 B 0 B
packages/apps/esm-primary-navigation-app/dist/710.js 6.44 kB 0 B
packages/apps/esm-primary-navigation-app/dist/716.js 6.12 kB 0 B
packages/apps/esm-primary-navigation-app/dist/735.js 2.64 kB 0 B
packages/apps/esm-primary-navigation-app/dist/743.js 7.25 kB 0 B
packages/apps/esm-primary-navigation-app/dist/757.js 209 B 0 B
packages/apps/esm-primary-navigation-app/dist/788.js 42.9 kB 0 B
packages/apps/esm-primary-navigation-app/dist/807.js 235 B 0 B
packages/apps/esm-primary-navigation-app/dist/833.js 210 B 0 B
packages/apps/esm-primary-navigation-app/dist/889.js 172 kB +11 B (0%)
packages/apps/esm-primary-navigation-app/dist/948.js 3.08 kB 0 B
packages/apps/esm-primary-navigation-app/dist/953.js 12.8 kB 0 B
packages/apps/esm-primary-navigation-app/dist/main.js 4.79 kB 0 B
packages/apps/esm-primary-navigation-app/dist/openmrs-esm-primary-navigation-app.js 3.29 kB 0 B
packages/framework/esm-api/dist/openmrs-esm-api.js 9.68 kB +6 B (0%)
packages/framework/esm-breadcrumbs/dist/openmrs-esm-breadcrumbs.js 2.66 kB 0 B
packages/framework/esm-config/dist/openmrs-esm-module-config.js 7.87 kB 0 B
packages/framework/esm-dynamic-loading/dist/openmrs-esm-dynamic-loading.js 2.12 kB 0 B
packages/framework/esm-error-handling/dist/openmrs-esm-error-handling.js 894 B 0 B
packages/framework/esm-extensions/dist/openmrs-esm-extensions.js 8.05 kB 0 B
packages/framework/esm-feature-flags/dist/openmrs-esm-feature-flags.js 1.67 kB 0 B
packages/framework/esm-framework/dist/146.openmrs-esm-framework.js 6.69 kB 0 B
packages/framework/esm-framework/dist/455.openmrs-esm-framework.js 4.57 kB 0 B
packages/framework/esm-framework/dist/530.openmrs-esm-framework.js 2.92 kB 0 B
packages/framework/esm-framework/dist/645.openmrs-esm-framework.js 9.31 kB 0 B
packages/framework/esm-framework/dist/710.openmrs-esm-framework.js 6.48 kB 0 B
packages/framework/esm-framework/dist/735.openmrs-esm-framework.js 2.66 kB 0 B
packages/framework/esm-framework/dist/788.openmrs-esm-framework.js 42.9 kB 0 B
packages/framework/esm-framework/dist/openmrs-esm-framework.js 372 kB +36 B (0%)
packages/framework/esm-globals/dist/openmrs-esm-globals.js 714 B 0 B
packages/framework/esm-offline/dist/openmrs-esm-offline.js 34.4 kB 0 B
packages/framework/esm-react-utils/dist/openmrs-esm-react-utils.js 14.8 kB 0 B
packages/framework/esm-state/dist/openmrs-esm-state.js 888 B 0 B
packages/framework/esm-styleguide/dist/openmrs-esm-styleguide.js 82.7 kB +8 B (0%)
packages/framework/esm-utils/dist/openmrs-esm-utils.js 10.2 kB 0 B
packages/shell/esm-app-shell/dist/6738bea79c65fe1d.js 16.5 kB 0 B
packages/shell/esm-app-shell/dist/74758f432e4bb251.js 0 B -6.02 kB (removed) 🏆
packages/shell/esm-app-shell/dist/966c4dfec919951f.js 1.58 kB 0 B
packages/shell/esm-app-shell/dist/service-worker.js 60.4 kB +1 B (0%)
packages/tooling/openmrs/dist/cli.js 3.09 kB 0 B
packages/tooling/openmrs/dist/commands/assemble.js 2.73 kB 0 B
packages/tooling/openmrs/dist/commands/build.js 1.66 kB 0 B
packages/tooling/openmrs/dist/commands/debug.js 579 B 0 B
packages/tooling/openmrs/dist/commands/develop.js 1.85 kB 0 B
packages/tooling/openmrs/dist/commands/index.js 438 B 0 B
packages/tooling/openmrs/dist/commands/start.js 848 B 0 B
packages/tooling/openmrs/dist/index.js 517 B 0 B
packages/tooling/openmrs/dist/runner.js 870 B 0 B
packages/tooling/openmrs/dist/utils/config.js 726 B 0 B
packages/tooling/openmrs/dist/utils/debugger.js 529 B 0 B
packages/tooling/openmrs/dist/utils/dependencies.js 639 B 0 B
packages/tooling/openmrs/dist/utils/helpers.js 393 B 0 B
packages/tooling/openmrs/dist/utils/importmap.js 3.25 kB 0 B
packages/tooling/openmrs/dist/utils/index.js 444 B 0 B
packages/tooling/openmrs/dist/utils/logger.js 234 B 0 B
packages/tooling/openmrs/dist/utils/npmConfig.js 854 B 0 B
packages/tooling/openmrs/dist/utils/untar.js 721 B 0 B
packages/tooling/openmrs/dist/utils/variables.js 192 B 0 B
packages/tooling/openmrs/dist/utils/webpack.js 276 B 0 B
packages/tooling/webpack-config/dist/index.js 3.37 kB 0 B
packages/shell/esm-app-shell/dist/b55fece0291083b9.js 6.02 kB +6.02 kB (new file) 🆕

compressed-size-action

},
});
});
it("should render Logout and redirect to login page ig provider.type !== oauth2", async () => {
Copy link
Collaborator

Choose a reason for hiding this comment

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

Suggested change
it("should render Logout and redirect to login page ig provider.type !== oauth2", async () => {
it("should render Logout and redirect to login page if provider.type !== oauth2", async () => {

Copy link
Member

Choose a reason for hiding this comment

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

I don't think the if provider.type !== oauth2 is informative or useful here. If we need something here, it might be better to say by default.

Basically, I don't think our test descriptions should hard-code the assumption that the only provider.types are "default" or "oauth2".

Copy link
Collaborator

Choose a reason for hiding this comment

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

@ibacher Could you take another look at this part and see if it makes sense to you? I don't know anything about provider type and oauth.

Copy link
Member

Choose a reason for hiding this comment

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

I'm happy with the new test name.

How I'm thinking about this is there: there are various forms of SSO protocols (Kerberos, SAML, OIDC—which is what we're calling OAuth2) with slightly different mechanisms for communicating between the authentication server and the resource server (which is the role OpenMRS plays in any configuration). The provider attribute allows us to customize the way the login app works based on the expected authentication server type.

Currently, we only really have two modes: OpenMRS base authentication and OAuth2 (which is, at least OIDC-like), but it's helpful to have it be treated as more than just a binary value.

Copy link
Collaborator

Choose a reason for hiding this comment

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

Nice, and thanks for the explanation!

@@ -1,5 +1,5 @@
<!DOCTYPE html>
<html lang="<%= openmrsDefaultLocale %>">
<html lang="<%= openmrsDefaultLocale %>" defaultLang="<%= openmrsDefaultLocale %>">
Copy link
Collaborator

Choose a reason for hiding this comment

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

Suggested change
<html lang="<%= openmrsDefaultLocale %>" defaultLang="<%= openmrsDefaultLocale %>">
<html lang="<%= openmrsDefaultLocale %>" data-default-lang="<%= openmrsDefaultLocale %>">

Custom attributes must be prefixed.

@@ -19,6 +20,13 @@ const RedirectLogout: React.FC<RedirectLogoutProps> = () => {
navigate({ to: "${openmrsSpaBase}/login" });
} else {
performLogout().then(() => {
const defaultLang =
document.documentElement.getAttribute("defaultLang");
Copy link
Collaborator

Choose a reason for hiding this comment

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

Suggested change
document.documentElement.getAttribute("defaultLang");
document.documentElement.getAttribute("data-default-lang");

Copy link
Member

Choose a reason for hiding this comment

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

Shouldn't we just be using the lang attribute for this?

Copy link
Collaborator

Choose a reason for hiding this comment

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

The trouble is that the lang attribute gets updated with the user preference. That attribute is supposed to be set to the current language of that page. We need a way of storing the default language, which is passed in to the app shell and becomes an ejs parameter. I imagine there is also a way of obtaining the default without rendering it into the HTML. But I think this way of doing it is fine.

Copy link
Member

Choose a reason for hiding this comment

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

Yeah, ok, that makes sense.

@vasharma05 vasharma05 requested a review from brandones October 26, 2023 04:39
@brandones
Copy link
Collaborator

Everything LGTM other than the provider.type thing @ibacher commented on; I will let Ian take a look at the latter and give the approval.

Comment on lines +23 to +29
const defaultLang =
document.documentElement.getAttribute("data-default-lang");
setUserLanguage({
locale: defaultLang,
authenticated: false,
sessionId: "",
});
Copy link
Member

Choose a reason for hiding this comment

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

It might be better to make this part of the performLogout() or even the logic that happens here, which might solve similar issues (for instance, when a user's session times out, should the language be reset? If yes, it probably belongs in the refetchCurrentUser() logic), but this is only a suggestion.

Copy link
Member Author

Choose a reason for hiding this comment

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

Right @ibacher , I'll look into that too.
Thanks!

@vasharma05
Copy link
Member Author

@brandones , the changes are requested by you, can you approve the PR too?
Thanks!

@brandones brandones merged commit e18c5dd into main Oct 29, 2023
7 checks passed
@brandones brandones deleted the logout-locale branch October 29, 2023 21:33
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