diff --git a/packages/nicolium/src/actions/admin.ts b/packages/nicolium/src/actions/admin.ts
index 253e486c4..442421875 100644
--- a/packages/nicolium/src/actions/admin.ts
+++ b/packages/nicolium/src/actions/admin.ts
@@ -1,10 +1,8 @@
-import { importEntities } from '@/actions/importer';
import { getClient } from '@/api';
import { queryClient } from '@/queries/client';
import { queryKeys } from '@/queries/keys';
import { useComposeStore } from '@/stores/compose';
import { useModalsStore } from '@/stores/modals';
-import { useTimelinesStore } from '@/stores/timelines';
import { filterBadges, getTagDiff } from '@/utils/badges';
import type { AppDispatch, RootState } from '@/store';
@@ -24,22 +22,6 @@ const deactivateUser =
const deleteUser = (accountId: string) => (dispatch: AppDispatch, getState: () => RootState) =>
getClient(getState).admin.accounts.deleteAccount(accountId);
-const deleteStatus = (statusId: string) => (dispatch: AppDispatch, getState: () => RootState) =>
- getClient(getState)
- .admin.statuses.deleteStatus(statusId)
- .then(() => {
- useTimelinesStore.getState().actions.deleteStatus(statusId);
- return { statusId };
- });
-
-const toggleStatusSensitivity =
- (statusId: string, sensitive: boolean) => (dispatch: AppDispatch, getState: () => RootState) =>
- getClient(getState)
- .admin.statuses.updateStatus(statusId, { sensitive: !sensitive })
- .then((status) => {
- importEntities({ statuses: [status] });
- });
-
const tagUser =
(accountId: string, tags: string[]) => (dispatch: AppDispatch, getState: () => RootState) =>
getClient(getState).admin.accounts.tagUser(accountId, tags);
@@ -116,8 +98,6 @@ export {
ADMIN_CONFIG_UPDATE_SUCCESS,
deactivateUser,
deleteUser,
- deleteStatus,
- toggleStatusSensitivity,
setBadges,
setRole,
redactStatus,
diff --git a/packages/nicolium/src/actions/moderation.tsx b/packages/nicolium/src/actions/moderation.tsx
index f6204baf5..50d56ddc1 100644
--- a/packages/nicolium/src/actions/moderation.tsx
+++ b/packages/nicolium/src/actions/moderation.tsx
@@ -1,14 +1,19 @@
+import { useQueryClient } from '@tanstack/react-query';
import React from 'react';
-import { defineMessages, FormattedMessage, type IntlShape } from 'react-intl';
+import { defineMessages, FormattedMessage, useIntl, type IntlShape } from 'react-intl';
-import { deactivateUser, deleteUser, deleteStatus, toggleStatusSensitivity } from '@/actions/admin';
+import { deactivateUser, deleteUser } from '@/actions/admin';
import OutlineBox from '@/components/outline-box';
import Text from '@/components/ui/text';
import AccountContainer from '@/containers/account-container';
import { selectAccount } from '@/queries/accounts/selectors';
+import {
+ useAdminDeleteStatusMutation,
+ useAdminUpdateStatusMutation,
+} from '@/queries/admin/use-statuses';
import { queryClient } from '@/queries/client';
import { queryKeys } from '@/queries/keys';
-import { useModalsStore } from '@/stores/modals';
+import { useModalsActions, useModalsStore } from '@/stores/modals';
import toast from '@/toast';
import type { AppDispatch } from '@/store';
@@ -180,14 +185,18 @@ const deleteUserModal =
});
};
-const toggleStatusSensitivityModal =
- (intl: IntlShape, statusId: string, sensitive: boolean, afterConfirm = () => {}) =>
- (dispatch: AppDispatch) => {
+const useToggleStatusSensitivityModal = (statusId: string, afterConfirm = () => {}) => {
+ const intl = useIntl();
+ const { mutate: updateStatus } = useAdminUpdateStatusMutation(statusId);
+ const { openModal } = useModalsActions();
+ const queryClient = useQueryClient();
+
+ return (sensitive: boolean) => {
const status = queryClient.getQueryData(queryKeys.statuses.show(statusId));
const statusAccount = status ? selectAccount(status.account_id) : undefined;
const acct = statusAccount?.acct;
- useModalsStore.getState().actions.openModal('CONFIRM', {
+ openModal('CONFIRM', {
heading: intl.formatMessage(
!sensitive ? messages.markStatusSensitiveHeading : messages.markStatusNotSensitiveHeading,
),
@@ -199,43 +208,55 @@ const toggleStatusSensitivityModal =
!sensitive ? messages.markStatusSensitiveConfirm : messages.markStatusNotSensitiveConfirm,
),
onConfirm: () => {
- dispatch(toggleStatusSensitivity(statusId, sensitive))
- .then(() => {
- const message = intl.formatMessage(
- !sensitive ? messages.statusMarkedSensitive : messages.statusMarkedNotSensitive,
- { acct },
- );
- toast.success(message);
- })
- .catch(() => {});
- afterConfirm();
+ updateStatus(
+ { sensitive: !sensitive },
+ {
+ onSuccess: () => {
+ const message = intl.formatMessage(
+ !sensitive ? messages.statusMarkedSensitive : messages.statusMarkedNotSensitive,
+ { acct },
+ );
+ toast.success(message);
+ afterConfirm();
+ },
+ },
+ );
},
});
};
+};
-const deleteStatusModal =
- (intl: IntlShape, statusId: string, afterConfirm = () => {}) =>
- (dispatch: AppDispatch) => {
+const useDeleteStatusModal = (statusId: string, afterConfirm = () => {}) => {
+ const intl = useIntl();
+ const { mutate: deleteStatus } = useAdminDeleteStatusMutation(statusId);
+ const { openModal } = useModalsActions();
+ const queryClient = useQueryClient();
+
+ return () => {
const status = queryClient.getQueryData(queryKeys.statuses.show(statusId));
const statusAccount = status ? selectAccount(status.account_id) : undefined;
const acct = statusAccount?.acct;
- useModalsStore.getState().actions.openModal('CONFIRM', {
+ openModal('CONFIRM', {
heading: intl.formatMessage(messages.deleteStatusHeading),
- message: intl.formatMessage(messages.deleteStatusPrompt, {
- acct: {acct},
- }),
+ message: intl.formatMessage(messages.deleteStatusPrompt, { acct }),
confirm: intl.formatMessage(messages.deleteStatusConfirm),
onConfirm: () => {
- dispatch(deleteStatus(statusId))
- .then(() => {
+ deleteStatus(undefined, {
+ onSuccess: () => {
const message = intl.formatMessage(messages.statusDeleted, { acct });
toast.success(message);
- })
- .catch(() => {});
- afterConfirm();
+ afterConfirm();
+ },
+ });
},
});
};
+};
-export { deactivateUserModal, deleteUserModal, toggleStatusSensitivityModal, deleteStatusModal };
+export {
+ deactivateUserModal,
+ deleteUserModal,
+ useToggleStatusSensitivityModal,
+ useDeleteStatusModal,
+};
diff --git a/packages/nicolium/src/components/statuses/status-action-bar.tsx b/packages/nicolium/src/components/statuses/status-action-bar.tsx
index d5e219831..9411ed7cd 100644
--- a/packages/nicolium/src/components/statuses/status-action-bar.tsx
+++ b/packages/nicolium/src/components/statuses/status-action-bar.tsx
@@ -4,7 +4,7 @@ import React, { useCallback, useMemo } from 'react';
import { defineMessages, useIntl } from 'react-intl';
import { redactStatus } from '@/actions/admin';
-import { deleteStatusModal, toggleStatusSensitivityModal } from '@/actions/moderation';
+import { useDeleteStatusModal, useToggleStatusSensitivityModal } from '@/actions/moderation';
import { initReport, ReportableEntities } from '@/actions/reports';
import { changeSetting } from '@/actions/settings';
import {
@@ -739,9 +739,11 @@ const MenuButton: React.FC = ({
const { getOrCreateChatByAccountId } = useChats();
const { mutate: bookmarkStatus } = useBookmarkStatus(status.id);
const { mutate: unbookmarkStatus } = useUnbookmarkStatus(status.id);
- const { mutate: pinStatus } = usePinStatus(status?.id);
- const { mutate: unpinStatus } = useUnpinStatus(status?.id);
+ const { mutate: pinStatus } = usePinStatus(status.id);
+ const { mutate: unpinStatus } = useUnpinStatus(status.id);
const { mutate: unblockAccount } = useUnblockAccountMutation(status.account_id);
+ const deleteStatusModal = useDeleteStatusModal(status.id);
+ const toggleStatusSensitivityModal = useToggleStatusSensitivityModal(status.id);
const features = useFeatures();
const instance = useInstance();
@@ -920,11 +922,11 @@ const MenuButton: React.FC = ({
};
const handleDeleteStatus: React.EventHandler = () => {
- dispatch(deleteStatusModal(intl, status.id));
+ deleteStatusModal();
};
const handleToggleStatusSensitivity: React.EventHandler = () => {
- dispatch(toggleStatusSensitivityModal(intl, status.id, status.sensitive));
+ toggleStatusSensitivityModal(status.sensitive);
};
const handleDeleteFromGroup: React.EventHandler = () => {
diff --git a/packages/nicolium/src/features/event/components/event-header.tsx b/packages/nicolium/src/features/event/components/event-header.tsx
index 319358f5f..e3664d9e3 100644
--- a/packages/nicolium/src/features/event/components/event-header.tsx
+++ b/packages/nicolium/src/features/event/components/event-header.tsx
@@ -2,7 +2,7 @@ import { Link, useNavigate } from '@tanstack/react-router';
import React from 'react';
import { defineMessages, FormattedMessage, useIntl } from 'react-intl';
-import { deleteStatusModal, toggleStatusSensitivityModal } from '@/actions/moderation';
+import { useDeleteStatusModal, useToggleStatusSensitivityModal } from '@/actions/moderation';
import { initReport, ReportableEntities } from '@/actions/reports';
import { deleteStatus } from '@/actions/statuses';
import VerificationBadge from '@/components/accounts/verification-badge';
@@ -131,6 +131,8 @@ const EventHeader: React.FC = ({ status }) => {
const { mutate: unbookmarkStatus } = useUnbookmarkStatus(status?.id!);
const { mutate: pinStatus } = usePinStatus(status?.id!);
const { mutate: unpinStatus } = useUnpinStatus(status?.id!);
+ const deleteStatusModal = useDeleteStatusModal(status?.id!);
+ const toggleStatusSensitivityModal = useToggleStatusSensitivityModal(status?.id!);
if (!status || !status.event || !account) {
return (
@@ -241,11 +243,11 @@ const EventHeader: React.FC = ({ status }) => {
};
const handleToggleStatusSensitivity = () => {
- dispatch(toggleStatusSensitivityModal(intl, status.id, status.sensitive));
+ toggleStatusSensitivityModal(status.sensitive);
};
const handleDeleteStatus = () => {
- dispatch(deleteStatusModal(intl, status.id));
+ deleteStatusModal();
};
const makeMenu = (): MenuType => {