From a166bb5cf7a6743dcd28564327bce0289d40ae0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?= Date: Sun, 15 Mar 2026 11:04:40 +0100 Subject: [PATCH] nicolium: move some stuff away from actions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: nicole mikołajczyk --- packages/nicolium/src/actions/admin.ts | 20 +--------------- packages/nicolium/src/actions/statuses.ts | 11 --------- .../src/components/statuses/status.tsx | 8 +++---- packages/nicolium/src/normalizers/status.ts | 1 - .../nicolium/src/pages/dashboard/account.tsx | 13 ++++++----- .../src/queries/admin/use-accounts.ts | 23 +++++++++++++++++++ packages/nicolium/src/stores/status-meta.ts | 9 ++++++++ 7 files changed, 44 insertions(+), 41 deletions(-) diff --git a/packages/nicolium/src/actions/admin.ts b/packages/nicolium/src/actions/admin.ts index e564cded8..ca89f003f 100644 --- a/packages/nicolium/src/actions/admin.ts +++ b/packages/nicolium/src/actions/admin.ts @@ -4,24 +4,6 @@ import { queryKeys } from '@/queries/keys'; import { useComposeStore } from '@/stores/compose'; import { useModalsStore } from '@/stores/modals'; -const promoteToAdmin = (accountId: string) => getClient().admin.accounts.promoteToAdmin(accountId); - -const promoteToModerator = (accountId: string) => - getClient().admin.accounts.promoteToModerator(accountId); - -const demoteToUser = (accountId: string) => getClient().admin.accounts.demoteToUser(accountId); - -const setRole = (accountId: string, role: 'user' | 'moderator' | 'admin') => { - switch (role) { - case 'user': - return demoteToUser(accountId); - case 'moderator': - return promoteToModerator(accountId); - case 'admin': - return promoteToAdmin(accountId); - } -}; - const redactStatus = (statusId: string) => { const status = queryClient.getQueryData(queryKeys.statuses.show(statusId)); if (!status) return; @@ -40,4 +22,4 @@ const redactStatus = (statusId: string) => { }); }; -export { setRole, redactStatus }; +export { redactStatus }; diff --git a/packages/nicolium/src/actions/statuses.ts b/packages/nicolium/src/actions/statuses.ts index 7542be664..20f812cd2 100644 --- a/packages/nicolium/src/actions/statuses.ts +++ b/packages/nicolium/src/actions/statuses.ts @@ -326,16 +326,6 @@ const toggleMuteStatus = (status: Pick) => // handleTranslateMany(); // }; -const unfilterStatus = (statusId: string) => { - updateStatus( - statusId, - (status) => { - status.showFiltered = true; - }, - queryClient, - ); -}; - export { createStatus, editStatus, @@ -343,5 +333,4 @@ export { deleteStatus, deleteStatusFromGroup, toggleMuteStatus, - unfilterStatus, }; diff --git a/packages/nicolium/src/components/statuses/status.tsx b/packages/nicolium/src/components/statuses/status.tsx index 8ee9cedc7..7c2c43542 100644 --- a/packages/nicolium/src/components/statuses/status.tsx +++ b/packages/nicolium/src/components/statuses/status.tsx @@ -3,7 +3,6 @@ import clsx from 'clsx'; import React, { useEffect, useMemo, useRef } from 'react'; import { defineMessages, useIntl, FormattedList, FormattedMessage } from 'react-intl'; -import { unfilterStatus } from '@/actions/statuses'; import Card from '@/components/ui/card'; import Icon from '@/components/ui/icon'; import Text from '@/components/ui/text'; @@ -24,7 +23,7 @@ import { import { useComposeActions } from '@/stores/compose'; import { useModalsActions } from '@/stores/modals'; import { useSettings } from '@/stores/settings'; -import { useStatusMetaActions } from '@/stores/status-meta'; +import { useStatusMeta, useStatusMetaActions } from '@/stores/status-meta'; import { textForScreenReader } from '@/utils/status'; import HashtagLink from '../hashtag-link'; @@ -206,7 +205,8 @@ const Status: React.FC = React.memo((props) => { const router = useRouter(); const features = useFeatures(); - const { toggleStatusesMediaHidden } = useStatusMetaActions(); + const { toggleStatusesMediaHidden, unfilterStatus } = useStatusMetaActions(); + const { showFiltered } = useStatusMeta(status.id); const { openModal } = useModalsActions(); const { replyCompose, mentionCompose } = useComposeActions(); const { boostModal } = useSettings(); @@ -524,7 +524,7 @@ const Status: React.FC = React.memo((props) => { if (status.deleted) return ; - if (filtered && actualStatus.showFiltered !== true) { + if (filtered && showFiltered !== true) { const body = (
diff --git a/packages/nicolium/src/normalizers/status.ts b/packages/nicolium/src/normalizers/status.ts index f0fdd05b4..d4b73031e 100644 --- a/packages/nicolium/src/normalizers/status.ts +++ b/packages/nicolium/src/normalizers/status.ts @@ -134,7 +134,6 @@ const normalizeStatus = ( poll_id: poll?.id ?? null, group_id: group?.id ?? null, expectsCard: false, - showFiltered: null as null | boolean, deleted: false, ...status, quote_id: status.quote_id ?? null, diff --git a/packages/nicolium/src/pages/dashboard/account.tsx b/packages/nicolium/src/pages/dashboard/account.tsx index a7dc36efe..7305a836e 100644 --- a/packages/nicolium/src/pages/dashboard/account.tsx +++ b/packages/nicolium/src/pages/dashboard/account.tsx @@ -2,7 +2,6 @@ import { PLEROMA } from 'pl-api'; import React, { type ChangeEventHandler, useMemo, useState } from 'react'; import { defineMessages, FormattedMessage, type MessageDescriptor, useIntl } from 'react-intl'; -import { setRole } from '@/actions/admin'; import { useDeactivateUserModal, useDeleteUserModal } from '@/actions/moderation'; import Account from '@/components/accounts/account'; import List, { ListItem } from '@/components/list'; @@ -19,7 +18,7 @@ import { adminAccountRoute } from '@/features/ui/router'; import { useFeatures } from '@/hooks/use-features'; import { useOwnAccount } from '@/hooks/use-own-account'; import { useAccount } from '@/queries/accounts/use-account'; -import { useAdminUpdateTagsMutation } from '@/queries/admin/use-accounts'; +import { useAdminSetRoleMutation, useAdminUpdateTagsMutation } from '@/queries/admin/use-accounts'; import { useAdminSuggestAccountMutation, useAdminUnsuggestAccountMutation, @@ -94,6 +93,8 @@ interface IStaffRolePicker { const StaffRolePicker: React.FC = ({ account }) => { const intl = useIntl(); + const { mutate: adminSetRole } = useAdminSetRoleMutation(account.id); + const roles: Record = useMemo( () => ({ user: intl.formatMessage(messages.roleUser), @@ -106,8 +107,8 @@ const StaffRolePicker: React.FC = ({ account }) => { const handleRoleChange: React.ChangeEventHandler = (e) => { const role = e.target.value as AccountRole; - setRole(account.id, role) - .then(() => { + adminSetRole(role, { + onSuccess: () => { let message: MessageDescriptor | undefined; if (role === 'admin') { @@ -123,8 +124,8 @@ const StaffRolePicker: React.FC = ({ account }) => { if (message) { toast.success(intl.formatMessage(message, { acct: account.acct })); } - }) - .catch(() => {}); + }, + }); }; const accountRole = getRole(account); diff --git a/packages/nicolium/src/queries/admin/use-accounts.ts b/packages/nicolium/src/queries/admin/use-accounts.ts index c49909bae..090b6bec8 100644 --- a/packages/nicolium/src/queries/admin/use-accounts.ts +++ b/packages/nicolium/src/queries/admin/use-accounts.ts @@ -266,6 +266,28 @@ const useAdminUpdateTagsMutation = (accountId: string) => { }); }; +const useAdminSetRoleMutation = (accountId: string) => { + const client = useClient(); + const queryClient = useQueryClient(); + + return useMutation({ + mutationKey: ['admin', 'acounts', accountId, 'setRole'], + mutationFn: (role: 'user' | 'moderator' | 'admin') => { + switch (role) { + case 'user': + return client.admin.accounts.demoteToUser(accountId); + case 'moderator': + return client.admin.accounts.promoteToModerator(accountId); + case 'admin': + return client.admin.accounts.promoteToAdmin(accountId); + } + }, + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: queryKeys.accounts.show(accountId) }); + }, + }); +}; + export { useAdminAccount, useAdminAccounts, @@ -281,4 +303,5 @@ export { useAdminTagUserMutation, useAdminUntagUserMutation, useAdminUpdateTagsMutation, + useAdminSetRoleMutation, }; diff --git a/packages/nicolium/src/stores/status-meta.ts b/packages/nicolium/src/stores/status-meta.ts index 9f1aa91b9..8489dba44 100644 --- a/packages/nicolium/src/stores/status-meta.ts +++ b/packages/nicolium/src/stores/status-meta.ts @@ -11,6 +11,7 @@ type State = { targetLanguage?: string; localTargetLanguage?: string; showPollResults?: boolean; + showFiltered?: boolean; } >; actions: { @@ -25,6 +26,7 @@ type State = { hideLocalTranslation: (statusId: string) => void; setStatusLanguage: (statusId: string, language: string) => void; toggleShowPollResults: (statusId: string) => void; + unfilterStatus: (statusId: string) => void; }; }; @@ -117,6 +119,13 @@ const useStatusMetaStore = create()( state.statuses[statusId].showPollResults = !state.statuses[statusId].showPollResults; }); }, + unfilterStatus: (statusId) => { + set((state: State) => { + if (!state.statuses[statusId]) state.statuses[statusId] = {}; + + state.statuses[statusId].showFiltered = true; + }); + }, }, })), );