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 @@ -16,7 +16,12 @@ calendar?: boolean, chat?: boolean, thread?: string, - settings?: 'account' | 'keyservers' | 'danger-zone', + settings?: + | 'account' + | 'friend-list' + | 'block-list' + | 'keyservers' + | 'danger-zone', threadCreation?: boolean, selectedUserList?: $ReadOnlyArray, inviteSecret?: string, @@ -33,7 +38,15 @@ calendar: t.maybe(t.Boolean), chat: t.maybe(t.Boolean), thread: t.maybe(tID), - settings: t.maybe(t.enums.of(['account', 'keyservers', 'danger-zone'])), + settings: t.maybe( + t.enums.of([ + 'account', + 'friend-list', + 'block-list', + 'keyservers', + 'danger-zone', + ]), + ), threadCreation: t.maybe(t.Boolean), selectedUserList: t.maybe(t.list(t.String)), inviteSecret: t.maybe(t.String), @@ -49,6 +62,8 @@ const calendarRegex = new RegExp('(/|^)calendar(/|$)', 'i'); const chatRegex = new RegExp('(/|^)chat(/|$)', 'i'); const accountSettingsRegex = new RegExp('(/|^)settings/account(/|$)', 'i'); +const friendListRegex = new RegExp('(/|^)settings/friend-list(/|$)', 'i'); +const blockListRegex = new RegExp('(/|^)settings/block-list(/|$)', 'i'); const keyserversRegex = new RegExp('(/|^)settings/keyservers(/|$)', 'i'); const dangerZoneRegex = new RegExp('(/|^)settings/danger-zone(/|$)', 'i'); const threadPendingRegex = new RegExp( @@ -73,6 +88,8 @@ const calendarTest = calendarRegex.test(url); const chatTest = chatRegex.test(url); const accountSettingsTest = accountSettingsRegex.test(url); + const friendListTest = friendListRegex.test(url); + const blockListTest = blockListRegex.test(url); const keyserversSettingsTest = keyserversRegex.test(url); const dangerZoneTest = dangerZoneRegex.test(url); const threadPendingMatches = threadPendingRegex.exec(url); @@ -113,6 +130,10 @@ returnObj.chat = true; } else if (accountSettingsTest) { returnObj.settings = 'account'; + } else if (friendListTest) { + returnObj.settings = 'friend-list'; + } else if (blockListTest) { + returnObj.settings = 'block-list'; } else if (keyserversSettingsTest) { returnObj.settings = 'keyservers'; } else if (dangerZoneTest) { diff --git a/web/app.react.js b/web/app.react.js --- a/web/app.react.js +++ b/web/app.react.js @@ -309,6 +309,10 @@ if (tab === 'settings') { if (settingsSection === 'account') { mainContent = ; + } else if (settingsSection === 'friend-list') { + mainContent = null; + } else if (settingsSection === 'block-list') { + mainContent = null; } else if (settingsSection === 'keyservers') { mainContent = ; } else if (settingsSection === 'danger-zone') { 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 @@ -23,6 +23,20 @@ }); }, [dispatch]); + const onClickFriendList = React.useCallback(() => { + dispatch({ + type: updateNavInfoActionType, + payload: { tab: 'settings', settingsSection: 'friend-list' }, + }); + }, [dispatch]); + + const onClickBlockList = React.useCallback(() => { + dispatch({ + type: updateNavInfoActionType, + payload: { tab: 'settings', settingsSection: 'block-list' }, + }); + }, [dispatch]); + const onClickKeyservers = React.useCallback(() => { dispatch({ type: updateNavInfoActionType, @@ -59,6 +73,16 @@ name="My account" onClick={onClickAccountSettings} /> + + {keyserverSettingsListItem} ), - [keyserverSettingsListItem, onClickAccountSettings, onClickDangerZone], + [ + keyserverSettingsListItem, + onClickAccountSettings, + onClickBlockList, + onClickDangerZone, + onClickFriendList, + ], ); const panelData: $ReadOnlyArray = React.useMemo( diff --git a/web/types/nav-types.js b/web/types/nav-types.js --- a/web/types/nav-types.js +++ b/web/types/nav-types.js @@ -20,10 +20,14 @@ export type NavigationSettingsSection = | 'account' + | 'friend-list' + | 'block-list' | 'keyservers' | 'danger-zone'; const navigationSettingsSectionValidator = t.enums.of([ 'account', + 'friend-list', + 'block-list', 'keyservers', 'danger-zone', ]);