From b50b06ecce3c1a6992a7194a8c0da51c948f7191 Mon Sep 17 00:00:00 2001 From: "Mahatthana (Kelvin) Nomsawadi" <mahatthana.n@gmail.com> Date: Wed, 20 Jul 2022 17:07:47 +0700 Subject: [PATCH] Fix SSO users can't change language setting (#24091) * Fix changing locale doesn't reload page * Fix SSO users can't set language * Address Alexander's feedback --- .../UserProfileForm/UserProfileForm.jsx | 20 +++++++++------- frontend/src/metabase/entities/users/forms.js | 24 +++++++++---------- .../onboarding/setup/user_settings.cy.spec.js | 3 +++ 3 files changed, 25 insertions(+), 22 deletions(-) diff --git a/frontend/src/metabase/account/profile/components/UserProfileForm/UserProfileForm.jsx b/frontend/src/metabase/account/profile/components/UserProfileForm/UserProfileForm.jsx index 45a412908a4..c1eba20a5c3 100644 --- a/frontend/src/metabase/account/profile/components/UserProfileForm/UserProfileForm.jsx +++ b/frontend/src/metabase/account/profile/components/UserProfileForm/UserProfileForm.jsx @@ -1,22 +1,24 @@ import React, { useCallback } from "react"; import PropTypes from "prop-types"; + import User from "metabase/entities/users"; +import { usePrevious } from "metabase/hooks/use-previous"; const propTypes = { user: PropTypes.object, }; const UserProfileForm = ({ user }) => { - const handleSaved = useCallback( - ({ locale }) => { - if (locale !== user.locale) { - window.location.reload(); - } - }, - [user], - ); + const previousUser = usePrevious(user); + const handleSaved = useCallback(() => { + if (previousUser.locale !== user.locale) { + window.location.reload(); + } + }, [previousUser?.locale, user?.locale]); - return <User.Form user={user} form={User.forms.user} onSaved={handleSaved} />; + return ( + <User.Form user={user} form={User.forms.user(user)} onSaved={handleSaved} /> + ); }; UserProfileForm.propTypes = propTypes; diff --git a/frontend/src/metabase/entities/users/forms.js b/frontend/src/metabase/entities/users/forms.js index d2043de0d75..54237677188 100644 --- a/frontend/src/metabase/entities/users/forms.js +++ b/frontend/src/metabase/entities/users/forms.js @@ -84,20 +84,18 @@ export default { ...PLUGIN_ADMIN_USER_FORM_FIELDS, ], }, - user: { - fields: user => { - const isSsoUser = !PLUGIN_IS_PASSWORD_USER.every(predicate => - predicate(user), - ); + user: user => { + const isSsoUser = !PLUGIN_IS_PASSWORD_USER.every(predicate => + predicate(user), + ); + const fields = isSsoUser + ? [getLocaleField()] + : [...getNameFields(), getEmailField(), getLocaleField()]; - if (isSsoUser) { - return [getLocaleField()]; - } - - // password user - return [...getNameFields(), getEmailField(), getLocaleField()]; - }, - disablePristineSubmit: true, + return { + fields, + disablePristineSubmit: true, + }; }, setup: () => ({ fields: [ diff --git a/frontend/test/metabase/scenarios/onboarding/setup/user_settings.cy.spec.js b/frontend/test/metabase/scenarios/onboarding/setup/user_settings.cy.spec.js index 7b171907d08..8d737ac298e 100644 --- a/frontend/test/metabase/scenarios/onboarding/setup/user_settings.cy.spec.js +++ b/frontend/test/metabase/scenarios/onboarding/setup/user_settings.cy.spec.js @@ -142,6 +142,9 @@ describe("user > settings", () => { cy.button("Update").click(); cy.wait("@updateUserSettings"); + // Assert that the page reloaded with the new language + cy.findByLabelText("Nama depan").should("exist"); + // We need some UI element other than a string cy.icon("gear").should("exist"); }); -- GitLab