From 9abc3b9a67bacce09e8052594c27f50b464cb8e3 Mon Sep 17 00:00:00 2001 From: mkljczk Date: Sat, 22 Feb 2025 22:46:04 +0100 Subject: [PATCH] pl-fe: admin dashboard support on non-pleroma backends Signed-off-by: mkljczk --- packages/pl-fe/src/api/hooks/accounts/use-account.ts | 11 +++++++++-- packages/pl-fe/src/components/status-action-bar.tsx | 2 +- .../src/features/event/components/event-header.tsx | 2 +- packages/pl-fe/src/reducers/accounts-meta.ts | 8 ++++++-- packages/pl-fe/src/selectors/index.ts | 2 ++ packages/pl-fe/src/utils/scopes.ts | 2 +- 6 files changed, 20 insertions(+), 7 deletions(-) diff --git a/packages/pl-fe/src/api/hooks/accounts/use-account.ts b/packages/pl-fe/src/api/hooks/accounts/use-account.ts index 75f0e3ac7..8d88f15b5 100644 --- a/packages/pl-fe/src/api/hooks/accounts/use-account.ts +++ b/packages/pl-fe/src/api/hooks/accounts/use-account.ts @@ -33,7 +33,7 @@ const useAccount = (accountId?: string, opts: UseAccountOpts = {}) => { { enabled: !!accountId, transform: normalizeAccount }, ); - const meta = useAppSelector((state) => accountId && state.accounts_meta[accountId]); + const meta = useAppSelector((state) => accountId ? state.accounts_meta[accountId] : undefined); const { relationship, @@ -49,7 +49,14 @@ const useAccount = (accountId?: string, opts: UseAccountOpts = {}) => { const isUnavailable = (me === entity?.id) ? false : (isBlocked && !features.blockersVisible); const account = useMemo( - () => entity ? { ...entity, relationship, scrobble, __meta: { meta, ...entity.__meta } } : undefined, + () => entity ? { + ...entity, + relationship, + scrobble, + __meta: { meta, ...entity.__meta }, + // @ts-ignore + is_admin: meta?.role ? (meta.role.permissions & 0x1) === 0x1 : entity.is_admin, + } : undefined, [entity, relationship, scrobble], ); diff --git a/packages/pl-fe/src/components/status-action-bar.tsx b/packages/pl-fe/src/components/status-action-bar.tsx index 42e42c764..6a32ed73c 100644 --- a/packages/pl-fe/src/components/status-action-bar.tsx +++ b/packages/pl-fe/src/components/status-action-bar.tsx @@ -1000,7 +1000,7 @@ const MenuButton: React.FC = ({ icon: require('@tabler/icons/outline/gavel.svg'), }); - if (isAdmin) { + if (isAdmin && features.pleromaAdminStatuses) { menu.push({ text: intl.formatMessage(messages.admin_status), href: `/pleroma/admin/#/statuses/${status.id}/`, diff --git a/packages/pl-fe/src/features/event/components/event-header.tsx b/packages/pl-fe/src/features/event/components/event-header.tsx index be3284553..0ce1f4070 100644 --- a/packages/pl-fe/src/features/event/components/event-header.tsx +++ b/packages/pl-fe/src/features/event/components/event-header.tsx @@ -319,7 +319,7 @@ const EventHeader: React.FC = ({ status }) => { icon: require('@tabler/icons/outline/gavel.svg'), }); - if (isAdmin) { + if (isAdmin && features.pleromaAdminStatuses) { menu.push({ text: intl.formatMessage(messages.adminStatus), action: handleModerateStatus, diff --git a/packages/pl-fe/src/reducers/accounts-meta.ts b/packages/pl-fe/src/reducers/accounts-meta.ts index 7c2fe80a9..2018840e5 100644 --- a/packages/pl-fe/src/reducers/accounts-meta.ts +++ b/packages/pl-fe/src/reducers/accounts-meta.ts @@ -11,7 +11,9 @@ import type { Account, CredentialAccount } from 'pl-api'; interface AccountMeta { pleroma: Account['__meta']['pleroma']; - source: Account['__meta']['source']; + pleromaSource: Account['__meta']['source']; + source?: CredentialAccount['source']; + role?: CredentialAccount['role']; } type State = Immutable>; @@ -22,7 +24,9 @@ const importAccount = (state: State, account: CredentialAccount): State => draft[account.id] = { pleroma: account.__meta.pleroma ?? existing?.pleroma, - source: account.__meta.source ?? existing?.source, + pleromaSource: account.__meta.source ?? existing?.pleromaSource, + source: account.source ?? existing?.source, + role: account.role ?? existing?.role, }; }, { enableAutoFreeze: true }); diff --git a/packages/pl-fe/src/selectors/index.ts b/packages/pl-fe/src/selectors/index.ts index 0ad92d255..17c8a0ca6 100644 --- a/packages/pl-fe/src/selectors/index.ts +++ b/packages/pl-fe/src/selectors/index.ts @@ -44,6 +44,8 @@ const makeGetAccount = () => createSelector([ ...account, relationship, __meta: { meta, ...account.__meta }, + // @ts-ignore + is_admin: meta?.role ? (meta.role.permissions & 0x1) === 0x1 : account.is_admin, }; }); diff --git a/packages/pl-fe/src/utils/scopes.ts b/packages/pl-fe/src/utils/scopes.ts index c2133036d..eda6bc75d 100644 --- a/packages/pl-fe/src/utils/scopes.ts +++ b/packages/pl-fe/src/utils/scopes.ts @@ -16,7 +16,7 @@ const getInstanceScopes = (instance: Instance, admin: boolean = true) => { scopes = 'read write follow push write:bites'; break; case PLEROMA: - scopes = 'read write follow push admin'; + scopes = 'read write follow push'; break; default: scopes = 'read write follow push';