Skip to content

Commit 2efbd58

Browse files
committed
Support settings tabs via hash urls
1 parent 83d89cb commit 2efbd58

File tree

3 files changed

+29
-5
lines changed

3 files changed

+29
-5
lines changed

src/apps/accounts/src/settings/tabs/AccountSettingsTabs.tsx

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
import { Dispatch, FC, SetStateAction, useState } from 'react'
1+
import { Dispatch, FC, SetStateAction, useMemo, useState } from 'react'
2+
import { useLocation } from 'react-router-dom'
23

34
import { UserProfile } from '~/libs/core'
45
import { TabsNavbar } from '~/libs/ui'
56

6-
import { AccountSettingsTabsConfig, AccountSettingsTabViews } from './config'
7+
import { AccountSettingsTabsConfig, AccountSettingsTabViews, getHashFromTabId, getTabIdFromHash } from './config'
78
import { AccountTab } from './account'
89
import { PreferencesTab } from './preferences'
910
import styles from './AccountSettingsTabs.module.scss'
@@ -13,11 +14,16 @@ interface AccountSettingsTabsProps {
1314
}
1415

1516
const AccountSettingsTabs: FC<AccountSettingsTabsProps> = (props: AccountSettingsTabsProps) => {
17+
const { hash }: { hash: string } = useLocation()
18+
19+
const activeTabHash: string = useMemo<string>(() => getTabIdFromHash(hash), [hash])
20+
1621
const [activeTab, setActiveTab]: [string, Dispatch<SetStateAction<string>>]
17-
= useState<string>(AccountSettingsTabViews.account)
22+
= useState<string>(activeTabHash)
1823

1924
function handleTabChange(tabId: string): void {
2025
setActiveTab(tabId)
26+
window.location.hash = getHashFromTabId(tabId)
2127
}
2228

2329
return (

src/apps/accounts/src/settings/tabs/config/account-settings-tabs-config.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,21 @@ export const AccountSettingsTabsConfig: TabsNavItem[] = [
2020
title: 'Payment',
2121
},
2222
]
23+
24+
export function getHashFromTabId(tabId: string): string {
25+
switch (tabId) {
26+
case AccountSettingsTabViews.account: return '#account'
27+
case AccountSettingsTabViews.preferences: return '#preferences'
28+
case AccountSettingsTabViews.payment: return '#payment'
29+
default: return '#account'
30+
}
31+
}
32+
33+
export function getTabIdFromHash(hash: string): string {
34+
switch (hash) {
35+
case '#account': return AccountSettingsTabViews.account
36+
case '#preferences': return AccountSettingsTabViews.preferences
37+
case '#payment': return AccountSettingsTabViews.payment
38+
default: return AccountSettingsTabViews.account
39+
}
40+
}

src/apps/accounts/src/settings/tabs/preferences/PreferencesTab.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@ const PreferencesTab: FC<PreferencesTabProps> = (props: PreferencesTabProps) =>
7878
<div className={styles.subAction}>
7979
<form action={mailChimpFormAction} method='post' id='mc-embedded-subscribe-form' name='mc-embedded-subscribe-form' noValidate>
8080
<input type='email' value={props.profile.email} readOnly name='EMAIL' id='mce-EMAIL' />
81-
<input type='checkbox' id='gdpr_11101' name='gdpr[11101]' value='Y' />
82-
<input type='text' name='b_65bd5a1857b73643aad556093_28bfd3c062' value='' />
81+
<input type='checkbox' id='gdpr_11101' name='gdpr[11101]' value='Y' readOnly />
82+
<input type='text' name='b_65bd5a1857b73643aad556093_28bfd3c062' value='' readOnly />
8383
<Button
8484
label={emailPreferences.status === 'subscribed' ? 'Unsubscribe' : 'Subscribe'}
8585
secondary

0 commit comments

Comments
 (0)