Skip to content

Commit a483f56

Browse files
committed
settings: Use InputRowRadioButtons for the language picker
This lets us simplify code, and it also gives consistency with our other radio-button inputs: - The row's selected value is now shown in the row itself, so you don't have to find it by opening the options screen (and scrolling down if it's not in the first screenful there). - The idiosyncratic dividers between language options are removed.
1 parent 972115e commit a483f56

File tree

5 files changed

+16
-117
lines changed

5 files changed

+16
-117
lines changed

src/common/SelectableOptionsScreen.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,8 @@ export default function SelectableOptionsScreen<TItemKey: string | number>(
9595
? items
9696
: items.filter(item => {
9797
// TODO: Is this the best way to filter? Where `title` and
98-
// `subtitle` are present, behavior is matched to the language
99-
// picker.
98+
// `subtitle` are present, behavior is matched to an old
99+
// implementation of the language picker.
100100

101101
/* eslint-disable prefer-template */
102102
const itemData =

src/nav/AppNavigator.js

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ import PmConversationDetailsScreen from '../chat/PmConversationDetailsScreen';
3131
import SearchMessagesScreen from '../search/SearchMessagesScreen';
3232
import New1to1PmScreen from '../user-picker/New1to1PmScreen';
3333
import ChatScreen from '../chat/ChatScreen';
34-
import LanguageScreen from '../settings/LanguageScreen';
3534
import PasswordAuthScreen from '../start/PasswordAuthScreen';
3635
import LightboxScreen from '../lightbox/LightboxScreen';
3736
import NewGroupPmScreen from '../user-picker/NewGroupPmScreen';
@@ -67,7 +66,6 @@ export type AppNavigatorParamList = {|
6766
+'realm-input': RouteParamsOf<typeof RealmInputScreen>,
6867
+'search-messages': RouteParamsOf<typeof SearchMessagesScreen>,
6968
+'new-1to1-pm': RouteParamsOf<typeof New1to1PmScreen>,
70-
+language: RouteParamsOf<typeof LanguageScreen>,
7169
+lightbox: RouteParamsOf<typeof LightboxScreen>,
7270
+'new-group-pm': RouteParamsOf<typeof NewGroupPmScreen>,
7371
+'invite-users': RouteParamsOf<typeof InviteUsersScreen>,
@@ -171,7 +169,6 @@ export default function AppNavigator(props: Props): Node {
171169
component={useHaveServerDataGate(SearchMessagesScreen)}
172170
/>
173171
<Stack.Screen name="new-1to1-pm" component={useHaveServerDataGate(New1to1PmScreen)} />
174-
<Stack.Screen name="language" component={useHaveServerDataGate(LanguageScreen)} />
175172
<Stack.Screen name="lightbox" component={useHaveServerDataGate(LightboxScreen)} />
176173
<Stack.Screen name="new-group-pm" component={useHaveServerDataGate(NewGroupPmScreen)} />
177174
<Stack.Screen name="invite-users" component={useHaveServerDataGate(InviteUsersScreen)} />

src/settings/LanguagePicker.js

Lines changed: 0 additions & 71 deletions
This file was deleted.

src/settings/LanguageScreen.js

Lines changed: 0 additions & 37 deletions
This file was deleted.

src/settings/SettingsScreen.js

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import { showErrorAlert } from '../utils/info';
3131
import { TranslationContext } from '../boot/TranslationProvider';
3232
import { useNotificationReportsByIdentityKey } from './NotifTroubleshootingScreen';
3333
import { keyOfIdentity } from '../account/accountMisc';
34+
import languages from './languages';
3435

3536
type Props = $ReadOnly<{|
3637
navigation: AppNavigationProp<'settings'>,
@@ -42,6 +43,7 @@ export default function SettingsScreen(props: Props): Node {
4243
const browser = useGlobalSelector(state => getGlobalSettings(state).browser);
4344
const globalSettings = useGlobalSelector(getGlobalSettings);
4445
const markMessagesReadOnScroll = globalSettings.markMessagesReadOnScroll;
46+
const language = useGlobalSelector(state => getGlobalSettings(state).language);
4547

4648
const zulipVersion = useSelector(getServerVersion);
4749
const identity = useSelector(getIdentity);
@@ -99,12 +101,20 @@ export default function SettingsScreen(props: Props): Node {
99101
navigation.push('notifications');
100102
}}
101103
/>
102-
<NestedNavRow
104+
<InputRowRadioButtons
103105
icon={{ Component: IconLanguage }}
104-
title="Language"
105-
onPress={() => {
106-
navigation.push('language');
106+
navigation={navigation}
107+
label="Language"
108+
valueKey={language}
109+
items={languages.map(l => ({
110+
key: l.tag,
111+
title: { text: '{_}', values: { _: l.selfname } },
112+
subtitle: { text: '{_}', values: { _: l.name } },
113+
}))}
114+
onValueChange={value => {
115+
dispatch(setGlobalSettings({ language: value }));
107116
}}
117+
search
108118
/>
109119
<NestedNavRow
110120
icon={{ Component: IconMoreHorizontal }}

0 commit comments

Comments
 (0)