diff --git a/lib/types/nav-types.js b/lib/types/nav-types.js --- a/lib/types/nav-types.js +++ b/lib/types/nav-types.js @@ -27,12 +27,14 @@ | 'friend-list' | 'block-list' | 'keyservers' + | 'build-info' | 'danger-zone'; export const webNavigationSettingsSectionValidator: TEnums = t.enums.of([ 'account', 'friend-list', 'block-list', 'keyservers', + 'build-info', 'danger-zone', ]); export type WebNavigationChatMode = 'view' | 'create'; diff --git a/lib/utils/url-utils.js b/lib/utils/url-utils.js --- a/lib/utils/url-utils.js +++ b/lib/utils/url-utils.js @@ -21,6 +21,7 @@ | 'friend-list' | 'block-list' | 'keyservers' + | 'build-info' | 'danger-zone', threadCreation?: boolean, selectedUserList?: $ReadOnlyArray, @@ -44,6 +45,7 @@ 'friend-list', 'block-list', 'keyservers', + 'build-info', 'danger-zone', ]), ), @@ -65,6 +67,7 @@ const friendListRegex = new RegExp('(/|^)settings/friend-list(/|$)', 'i'); const blockListRegex = new RegExp('(/|^)settings/block-list(/|$)', 'i'); const keyserversRegex = new RegExp('(/|^)settings/keyservers(/|$)', 'i'); +const buildInfoRegex = new RegExp('(/|^)settings/build-info(/|$)', 'i'); const dangerZoneRegex = new RegExp('(/|^)settings/danger-zone(/|$)', 'i'); const threadPendingRegex = new RegExp( `(/|^)thread/(${pendingThreadIDRegex})(/|$)`, @@ -91,6 +94,7 @@ const friendListTest = friendListRegex.test(url); const blockListTest = blockListRegex.test(url); const keyserversSettingsTest = keyserversRegex.test(url); + const buildInfoTest = buildInfoRegex.test(url); const dangerZoneTest = dangerZoneRegex.test(url); const threadPendingMatches = threadPendingRegex.exec(url); const threadCreateMatches = threadCreationRegex.exec(url); @@ -136,6 +140,8 @@ returnObj.settings = 'block-list'; } else if (keyserversSettingsTest) { returnObj.settings = 'keyservers'; + } else if (buildInfoTest) { + returnObj.settings = 'build-info'; } else if (dangerZoneTest) { returnObj.settings = 'danger-zone'; } else if (qrCodeLoginMatches) { diff --git a/web/app.react.js b/web/app.react.js --- a/web/app.react.js +++ b/web/app.react.js @@ -315,6 +315,8 @@ mainContent = null; } else if (settingsSection === 'keyservers') { mainContent = ; + } else if (settingsSection === 'build-info') { + mainContent = null; } else if (settingsSection === 'danger-zone') { mainContent = ; } diff --git a/web/settings/user-settings-list.react.js b/web/settings/user-settings-list.react.js --- a/web/settings/user-settings-list.react.js +++ b/web/settings/user-settings-list.react.js @@ -44,6 +44,13 @@ }); }, [dispatch]); + const onClickBuildInfo = React.useCallback(() => { + dispatch({ + type: updateNavInfoActionType, + payload: { tab: 'settings', settingsSection: 'build-info' }, + }); + }, [dispatch]); + const onClickDangerZone = React.useCallback(() => { dispatch({ type: updateNavInfoActionType, @@ -84,6 +91,11 @@ onClick={onClickBlockList} /> {keyserverSettingsListItem} +