From cb00bf85cc00c0c66d40a8805e5685298274ba45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?= Date: Fri, 16 Jan 2026 00:40:43 +0100 Subject: [PATCH] pl-fe: improve local users domain display with displayFqn === true MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: nicole mikołajczyk --- packages/pl-fe/src/components/account.tsx | 5 ++--- .../ui/components/panels/user-panel.tsx | 8 +++----- packages/pl-fe/src/hooks/use-acct.ts | 20 +++++++++++++++++++ packages/pl-fe/src/layouts/profile-layout.tsx | 7 +++---- 4 files changed, 28 insertions(+), 12 deletions(-) create mode 100644 packages/pl-fe/src/hooks/use-acct.ts diff --git a/packages/pl-fe/src/components/account.tsx b/packages/pl-fe/src/components/account.tsx index 607a3f076..7dfeb31de 100644 --- a/packages/pl-fe/src/components/account.tsx +++ b/packages/pl-fe/src/components/account.tsx @@ -14,10 +14,9 @@ import Text from 'pl-fe/components/ui/text'; import VerificationBadge from 'pl-fe/components/verification-badge'; import Emojify from 'pl-fe/features/emoji/emojify'; import ActionButton from 'pl-fe/features/ui/components/action-button'; +import { useAcct } from 'pl-fe/hooks/use-acct'; import { useAppSelector } from 'pl-fe/hooks/use-app-selector'; import { useSettings } from 'pl-fe/stores/settings'; -import { getAcct } from 'pl-fe/utils/accounts'; -import { displayFqn } from 'pl-fe/utils/state'; import Badge from './badge'; import { ParsedContent } from './parsed-content'; @@ -148,7 +147,7 @@ const Account = ({ const [style, setStyle] = useState({}); const me = useAppSelector((state) => state.me); - const username = useAppSelector((state) => account ? getAcct(account, displayFqn(state)) : null); + const username = useAcct(account); const { disableUserProvidedMedia } = useSettings(); const handleAction = () => { diff --git a/packages/pl-fe/src/features/ui/components/panels/user-panel.tsx b/packages/pl-fe/src/features/ui/components/panels/user-panel.tsx index 1f89e7620..aaced57a1 100644 --- a/packages/pl-fe/src/features/ui/components/panels/user-panel.tsx +++ b/packages/pl-fe/src/features/ui/components/panels/user-panel.tsx @@ -11,11 +11,9 @@ import Stack from 'pl-fe/components/ui/stack'; import Text from 'pl-fe/components/ui/text'; import VerificationBadge from 'pl-fe/components/verification-badge'; import Emojify from 'pl-fe/features/emoji/emojify'; -import { useAppSelector } from 'pl-fe/hooks/use-app-selector'; +import { useAcct } from 'pl-fe/hooks/use-acct'; import { useSettings } from 'pl-fe/stores/settings'; -import { getAcct } from 'pl-fe/utils/accounts'; import { shortNumberFormat } from 'pl-fe/utils/numbers'; -import { displayFqn } from 'pl-fe/utils/state'; const messages = defineMessages({ account_locked: { id: 'account.locked_info', defaultMessage: 'This account privacy status is set to locked. The owner manually reviews who can follow them.' }, @@ -32,7 +30,7 @@ const UserPanel: React.FC = ({ accountId, action, badges, domain }) const intl = useIntl(); const { demetricator, disableUserProvidedMedia } = useSettings(); const { account } = useAccount(accountId); - const fqn = useAppSelector((state) => displayFqn(state)); + const displayedAcct = useAcct(account); if (!account) return null; const acct = !account.acct.includes('@') && domain ? `${account.acct}@${domain}` : account.acct; @@ -96,7 +94,7 @@ const UserPanel: React.FC = ({ accountId, action, badges, domain }) - @{getAcct(account, fqn)} + @{displayedAcct} {account.locked && ( diff --git a/packages/pl-fe/src/hooks/use-acct.ts b/packages/pl-fe/src/hooks/use-acct.ts new file mode 100644 index 000000000..ce3b112ea --- /dev/null +++ b/packages/pl-fe/src/hooks/use-acct.ts @@ -0,0 +1,20 @@ +import { displayFqn } from 'pl-fe/utils/state'; + +import { useAppSelector } from './use-app-selector'; +import { useInstance } from './use-instance'; + +import type { Account } from 'pl-api'; + +const useAcct = (account?: Pick): string | undefined => { + const fqn = useAppSelector((state) => displayFqn(state)); + const instance = useInstance(); + + if (!account) return; + if (!fqn) return account.acct; + if (account.local === false) return account.fqn; + return `${account.acct}@${instance.domain}`; +}; + +export { + useAcct, +}; diff --git a/packages/pl-fe/src/layouts/profile-layout.tsx b/packages/pl-fe/src/layouts/profile-layout.tsx index b39cfaa94..1694b1d2b 100644 --- a/packages/pl-fe/src/layouts/profile-layout.tsx +++ b/packages/pl-fe/src/layouts/profile-layout.tsx @@ -19,10 +19,9 @@ import { PinnedAccountsPanel, AccountNotePanel, } from 'pl-fe/features/ui/util/async-components'; +import { useAcct } from 'pl-fe/hooks/use-acct'; import { useAppSelector } from 'pl-fe/hooks/use-app-selector'; import { useFeatures } from 'pl-fe/hooks/use-features'; -import { usePlFeConfig } from 'pl-fe/hooks/use-pl-fe-config'; -import { getAcct } from 'pl-fe/utils/accounts'; /** Layout to display a user's profile. */ const ProfileLayout: React.FC = () => { @@ -33,7 +32,7 @@ const ProfileLayout: React.FC = () => { const me = useAppSelector(state => state.me); const features = useFeatures(); - const { displayFqn } = usePlFeConfig(); + const acct = useAcct(account); if (isUnauthorized) { localStorage.setItem('plfe:redirect_uri', location.href); @@ -101,7 +100,7 @@ const ProfileLayout: React.FC = () => { )} - +