diff --git a/.changeset/happy-forks-jam.md b/.changeset/happy-forks-jam.md new file mode 100644 index 0000000000..3f48853311 --- /dev/null +++ b/.changeset/happy-forks-jam.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-user-settings': minor +--- + +Updated the user settings selector to use a select component that displays native language names instead of language codes if possible. diff --git a/plugins/user-settings/src/components/General/UserSettingsLanguageToggle.test.tsx b/plugins/user-settings/src/components/General/UserSettingsLanguageToggle.test.tsx index 6e3a01c3c5..88b257c833 100644 --- a/plugins/user-settings/src/components/General/UserSettingsLanguageToggle.test.tsx +++ b/plugins/user-settings/src/components/General/UserSettingsLanguageToggle.test.tsx @@ -74,7 +74,10 @@ describe('UserSettingsLanguageToggle', () => { await renderInTestApp(); - fireEvent.click(screen.getByText('de')); + // open the select control + fireEvent.mouseDown(screen.getByText('English')); + // select the new language + fireEvent.click(screen.getByText('Deutsch')); expect(mockLanguageApi.setLanguage).toHaveBeenCalledWith('de'); }); diff --git a/plugins/user-settings/src/components/General/UserSettingsLanguageToggle.tsx b/plugins/user-settings/src/components/General/UserSettingsLanguageToggle.tsx index 67519d24ae..15c6e9ea9c 100644 --- a/plugins/user-settings/src/components/General/UserSettingsLanguageToggle.tsx +++ b/plugins/user-settings/src/components/General/UserSettingsLanguageToggle.tsx @@ -19,24 +19,16 @@ import { useTranslationRef, appLanguageApiRef, } from '@backstage/core-plugin-api/alpha'; -import ToggleButton from '@material-ui/lab/ToggleButton'; -import ToggleButtonGroup from '@material-ui/lab/ToggleButtonGroup'; import { ListItem, ListItemText, ListItemSecondaryAction, - Tooltip, makeStyles, } from '@material-ui/core'; import { userSettingsTranslationRef } from '../../translation'; import { useApi } from '@backstage/core-plugin-api'; import useObservable from 'react-use/lib/useObservable'; - -type TooltipToggleButtonProps = { - children: JSX.Element; - title: string; - value: string; -}; +import { Select } from '@backstage/core-components'; const useStyles = makeStyles(theme => ({ container: { @@ -71,21 +63,6 @@ const useStyles = makeStyles(theme => ({ }, })); -// ToggleButtonGroup uses React.children.map instead of context -// so wrapping with Tooltip breaks ToggleButton functionality. -const TooltipToggleButton = ({ - children, - title, - value, - ...props -}: TooltipToggleButtonProps) => ( - - - {children} - - -); - /** @public */ export const UserSettingsLanguageToggle = () => { const classes = useStyles(); @@ -104,13 +81,21 @@ export const UserSettingsLanguageToggle = () => { return null; } - const handleSetLanguage = ( - _event: React.MouseEvent, - newLanguage: string | undefined, - ) => { + const handleSetLanguage = (newLanguage: string | undefined) => { languageApi.setLanguage(newLanguage); }; + const getLanguageDisplayName = (language: string) => { + try { + const names = new Intl.DisplayNames([language], { + type: 'language', + }); + return names.of(language) || language; + } catch (err) { + return language; + } + }; + return ( { secondary={t('languageToggle.description')} /> - - {languages.map(language => { - return ( - - <>{language} - - ); - })} - +