snapshot of https://github.com/RocketChat/Rocket.Chat.git (develop, 2026-09-16; blobs > 131072B omitted)
Some checks failed
Create issues from TODOs / todos (push) Failing after 3s
Close inactive issues / close-issues (push) Has been cancelled
Deploy GitHub Pages / deploy-preview (push) Has been cancelled
CI / ⚙️ Variables Setup (push) Has been cancelled
CI / ⚙️ Test Guard (push) Has been cancelled
CI / 🚀 Notify external services - draft (push) Has been cancelled
CI / 📦 Build Packages (push) Has been cancelled
CI / 📦 Meteor Build (coverage) (push) Has been cancelled
CI / 📦 Meteor Build (production) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [account-service presence-service omnichannel-transcript-service], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [account-service presence-service omnichannel-transcript-service], fips) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [authorization-service queue-worker-service ddp-streamer-service], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [authorization-service queue-worker-service ddp-streamer-service], fips) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [rocketchat], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [rocketchat], coverage) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [rocketchat], fips) (push) Has been cancelled
CI / 🚢 Build Docker (arm64, [account-service presence-service omnichannel-transcript-service], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (arm64, [authorization-service queue-worker-service ddp-streamer-service], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (arm64, [rocketchat], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (arm64, [rocketchat], coverage) (push) Has been cancelled
CI / 🚢 Publish Docker Images (ghcr.io) (push) Has been cancelled
CI / 📦 Track Image Sizes (push) Has been cancelled
CI / 🔎 Code Check - Action Lint (push) Has been cancelled
CI / 🔎 Code Check (push) Has been cancelled
CI / 🔨 Test Storybook (push) Has been cancelled
CI / 🔨 Test Unit (push) Has been cancelled
CI / 🔨 Test API (CE) (push) Has been cancelled
CI / 🔨 Test API Livechat (CE) (push) Has been cancelled
CI / 🔨 Test UI (CE) (push) Has been cancelled
CI / 🔨 Test API (EE) (push) Has been cancelled
CI / 🔨 Test API Livechat (EE) (push) Has been cancelled
CI / 🔨 Test API Apps (deno-runtime - EE) (push) Has been cancelled
CI / 🔨 Test UI (EE) (push) Has been cancelled
CI / 🔨 Test API (FIPS) (push) Has been cancelled
CI / 🔨 Test API Livechat (FIPS) (push) Has been cancelled
CI / 🔨 Test UI (FIPS) (push) Has been cancelled
CI / 🔨 Test Federation Matrix (push) Has been cancelled
CI / 📊 Report Coverage (push) Has been cancelled
CI / ✅ Tests Done (push) Has been cancelled
CI / 🚀 Publish build assets (push) Has been cancelled
CI / 🚀 Publish Docker Images (DockerHub) (push) Has been cancelled
CI / 🚀 Notify external services (push) Has been cancelled
CI / Update Version Durability (push) Has been cancelled
Release / Release (push) Has been cancelled
Auto-close duplicate issues / auto-close-duplicates (push) Failing after 1s
Code scanning - action / CodeQL-Build (push) Failing after 1s
Some checks failed
Create issues from TODOs / todos (push) Failing after 3s
Close inactive issues / close-issues (push) Has been cancelled
Deploy GitHub Pages / deploy-preview (push) Has been cancelled
CI / ⚙️ Variables Setup (push) Has been cancelled
CI / ⚙️ Test Guard (push) Has been cancelled
CI / 🚀 Notify external services - draft (push) Has been cancelled
CI / 📦 Build Packages (push) Has been cancelled
CI / 📦 Meteor Build (coverage) (push) Has been cancelled
CI / 📦 Meteor Build (production) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [account-service presence-service omnichannel-transcript-service], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [account-service presence-service omnichannel-transcript-service], fips) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [authorization-service queue-worker-service ddp-streamer-service], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [authorization-service queue-worker-service ddp-streamer-service], fips) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [rocketchat], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [rocketchat], coverage) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [rocketchat], fips) (push) Has been cancelled
CI / 🚢 Build Docker (arm64, [account-service presence-service omnichannel-transcript-service], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (arm64, [authorization-service queue-worker-service ddp-streamer-service], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (arm64, [rocketchat], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (arm64, [rocketchat], coverage) (push) Has been cancelled
CI / 🚢 Publish Docker Images (ghcr.io) (push) Has been cancelled
CI / 📦 Track Image Sizes (push) Has been cancelled
CI / 🔎 Code Check - Action Lint (push) Has been cancelled
CI / 🔎 Code Check (push) Has been cancelled
CI / 🔨 Test Storybook (push) Has been cancelled
CI / 🔨 Test Unit (push) Has been cancelled
CI / 🔨 Test API (CE) (push) Has been cancelled
CI / 🔨 Test API Livechat (CE) (push) Has been cancelled
CI / 🔨 Test UI (CE) (push) Has been cancelled
CI / 🔨 Test API (EE) (push) Has been cancelled
CI / 🔨 Test API Livechat (EE) (push) Has been cancelled
CI / 🔨 Test API Apps (deno-runtime - EE) (push) Has been cancelled
CI / 🔨 Test UI (EE) (push) Has been cancelled
CI / 🔨 Test API (FIPS) (push) Has been cancelled
CI / 🔨 Test API Livechat (FIPS) (push) Has been cancelled
CI / 🔨 Test UI (FIPS) (push) Has been cancelled
CI / 🔨 Test Federation Matrix (push) Has been cancelled
CI / 📊 Report Coverage (push) Has been cancelled
CI / ✅ Tests Done (push) Has been cancelled
CI / 🚀 Publish build assets (push) Has been cancelled
CI / 🚀 Publish Docker Images (DockerHub) (push) Has been cancelled
CI / 🚀 Notify external services (push) Has been cancelled
CI / Update Version Durability (push) Has been cancelled
Release / Release (push) Has been cancelled
Auto-close duplicate issues / auto-close-duplicates (push) Failing after 1s
Code scanning - action / CodeQL-Build (push) Failing after 1s
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
import type { GenericMenuItemProps } from '@rocket.chat/ui-client';
|
||||
import { GenericModal } from '@rocket.chat/ui-client';
|
||||
import { useEndpoint, useRouteParameter, useRouter, useSetModal, useToastMessageDispatch } from '@rocket.chat/ui-contexts';
|
||||
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
const useDeactivateUserAction = (userId: string, isUserReport?: boolean): GenericMenuItemProps => {
|
||||
const { t } = useTranslation();
|
||||
const setModal = useSetModal();
|
||||
const dispatchToastMessage = useToastMessageDispatch();
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
const deactiveUser = useEndpoint('POST', '/v1/users.setActiveStatus');
|
||||
const deleteMessages = useEndpoint('POST', '/v1/moderation.user.deleteReportedMessages');
|
||||
const dismissUserReports = useEndpoint('POST', '/v1/moderation.dismissUserReports');
|
||||
|
||||
const router = useRouter();
|
||||
|
||||
const tab = useRouteParameter('tab');
|
||||
|
||||
const handleDeactivateUser = useMutation({
|
||||
mutationFn: deactiveUser,
|
||||
onError: (error) => {
|
||||
dispatchToastMessage({ type: 'error', message: error });
|
||||
},
|
||||
onSuccess: () => {
|
||||
dispatchToastMessage({ type: 'success', message: t('Moderation_User_deactivated') });
|
||||
},
|
||||
});
|
||||
|
||||
const handleDeleteMessages = useMutation({
|
||||
mutationFn: deleteMessages,
|
||||
onError: (error) => {
|
||||
dispatchToastMessage({ type: 'error', message: error });
|
||||
},
|
||||
onSuccess: () => {
|
||||
dispatchToastMessage({ type: 'success', message: t('Moderation_Messages_deleted') });
|
||||
},
|
||||
});
|
||||
|
||||
const handleDismissUserReports = useMutation({
|
||||
mutationFn: dismissUserReports,
|
||||
onError: (error) => {
|
||||
dispatchToastMessage({ type: 'error', message: error });
|
||||
},
|
||||
onSuccess: () => {
|
||||
dispatchToastMessage({ type: 'success', message: t('Moderation_Reports_dismissed') });
|
||||
},
|
||||
});
|
||||
|
||||
const onDeactivateUser = async () => {
|
||||
setModal();
|
||||
!isUserReport && (await handleDeleteMessages.mutateAsync({ userId }));
|
||||
await handleDeactivateUser.mutateAsync({ userId, activeStatus: false, confirmRelinquish: true });
|
||||
await handleDismissUserReports.mutateAsync({ userId });
|
||||
queryClient.invalidateQueries({ queryKey: ['moderation'] });
|
||||
router.navigate(`/admin/moderation/${tab}`);
|
||||
};
|
||||
|
||||
const confirmDeactivateUser = (): void => {
|
||||
setModal(
|
||||
<GenericModal
|
||||
title={t('Moderation_Deactivate_User')}
|
||||
confirmText={t('Moderation_Deactivate_User')}
|
||||
variant='danger'
|
||||
onConfirm={() => onDeactivateUser()}
|
||||
onCancel={() => setModal()}
|
||||
>
|
||||
{t('Moderation_Are_you_sure_you_want_to_deactivate_this_user')}
|
||||
</GenericModal>,
|
||||
);
|
||||
};
|
||||
|
||||
return {
|
||||
id: 'deactiveUser',
|
||||
content: t('Moderation_Deactivate_User'),
|
||||
icon: 'ban',
|
||||
onClick: () => confirmDeactivateUser(),
|
||||
};
|
||||
};
|
||||
|
||||
export default useDeactivateUserAction;
|
||||
@@ -0,0 +1,61 @@
|
||||
import { GenericModal } from '@rocket.chat/ui-client';
|
||||
import { useEndpoint, useSetModal, useToastMessageDispatch } from '@rocket.chat/ui-contexts';
|
||||
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
const useDeleteMessage = (mid: string, rid: string, onChange: () => void) => {
|
||||
const { t } = useTranslation();
|
||||
const deleteMessage = useEndpoint('POST', '/v1/chat.delete');
|
||||
const dismissMessage = useEndpoint('POST', '/v1/moderation.dismissReports');
|
||||
const dispatchToastMessage = useToastMessageDispatch();
|
||||
const setModal = useSetModal();
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
const handleDeleteMessages = useMutation({
|
||||
mutationFn: deleteMessage,
|
||||
onError: (error) => {
|
||||
dispatchToastMessage({ type: 'error', message: error });
|
||||
setModal();
|
||||
},
|
||||
onSuccess: async () => {
|
||||
await handleDismissMessage.mutateAsync({ msgId: mid });
|
||||
},
|
||||
});
|
||||
|
||||
const handleDismissMessage = useMutation({
|
||||
mutationFn: dismissMessage,
|
||||
onError: (error) => {
|
||||
dispatchToastMessage({ type: 'error', message: error });
|
||||
},
|
||||
onSuccess: () => {
|
||||
dispatchToastMessage({ type: 'success', message: t('Moderation_Message_deleted') });
|
||||
},
|
||||
onSettled: () => {
|
||||
onChange();
|
||||
queryClient.invalidateQueries({ queryKey: ['moderation', 'msgReports'] });
|
||||
setModal();
|
||||
},
|
||||
});
|
||||
|
||||
const onDeleteAll = async () => {
|
||||
await handleDeleteMessages.mutateAsync({ msgId: mid, roomId: rid, asUser: true });
|
||||
};
|
||||
|
||||
const confirmDeletMessage = (): void => {
|
||||
setModal(
|
||||
<GenericModal
|
||||
confirmText={t('Moderation_Dismiss_and_delete')}
|
||||
title={t('Moderation_Delete_this_message')}
|
||||
variant='danger'
|
||||
onConfirm={() => onDeleteAll()}
|
||||
onCancel={() => setModal()}
|
||||
>
|
||||
{t('Moderation_Are_you_sure_you_want_to_delete_this_message')}
|
||||
</GenericModal>,
|
||||
);
|
||||
};
|
||||
|
||||
return confirmDeletMessage;
|
||||
};
|
||||
|
||||
export default useDeleteMessage;
|
||||
@@ -0,0 +1,55 @@
|
||||
import type { GenericMenuItemProps } from '@rocket.chat/ui-client';
|
||||
import { GenericModal } from '@rocket.chat/ui-client';
|
||||
import { useEndpoint, useRouteParameter, useRouter, useSetModal, useToastMessageDispatch } from '@rocket.chat/ui-contexts';
|
||||
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
const useDeleteMessagesAction = (userId: string): GenericMenuItemProps => {
|
||||
const { t } = useTranslation();
|
||||
const deleteMessages = useEndpoint('POST', '/v1/moderation.user.deleteReportedMessages');
|
||||
const dispatchToastMessage = useToastMessageDispatch();
|
||||
const setModal = useSetModal();
|
||||
const router = useRouter();
|
||||
const tab = useRouteParameter('tab');
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
const handleDeleteMessages = useMutation({
|
||||
mutationFn: deleteMessages,
|
||||
onError: (error) => {
|
||||
dispatchToastMessage({ type: 'error', message: error });
|
||||
},
|
||||
onSuccess: () => {
|
||||
dispatchToastMessage({ type: 'success', message: t('Moderation_Messages_deleted') });
|
||||
},
|
||||
});
|
||||
|
||||
const onDeleteAll = async () => {
|
||||
await handleDeleteMessages.mutateAsync({ userId });
|
||||
queryClient.invalidateQueries({ queryKey: ['moderation', 'msgReports', 'fetchAll'] });
|
||||
setModal();
|
||||
router.navigate(`/admin/moderation/${tab}`);
|
||||
};
|
||||
|
||||
const confirmDeletMessages = (): void => {
|
||||
setModal(
|
||||
<GenericModal
|
||||
confirmText={t('Moderation_Dismiss_and_delete')}
|
||||
title={t('Moderation_Delete_all_messages')}
|
||||
variant='danger'
|
||||
onConfirm={() => onDeleteAll()}
|
||||
onCancel={() => setModal()}
|
||||
>
|
||||
{t('Moderation_Are_you_sure_you_want_to_delete_all_reported_messages_from_this_user')}
|
||||
</GenericModal>,
|
||||
);
|
||||
};
|
||||
|
||||
return {
|
||||
id: 'deleteAll',
|
||||
content: t('Moderation_Delete_all_messages'),
|
||||
icon: 'trash',
|
||||
onClick: () => confirmDeletMessages(),
|
||||
};
|
||||
};
|
||||
|
||||
export default useDeleteMessagesAction;
|
||||
@@ -0,0 +1,47 @@
|
||||
import { GenericModal } from '@rocket.chat/ui-client';
|
||||
import { useEndpoint, useSetModal, useToastMessageDispatch } from '@rocket.chat/ui-contexts';
|
||||
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
export const useDismissMessageAction = (msgId: string): { action: () => void } => {
|
||||
const { t } = useTranslation();
|
||||
const setModal = useSetModal();
|
||||
const dispatchToastMessage = useToastMessageDispatch();
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
const dismissMessage = useEndpoint('POST', '/v1/moderation.dismissReports');
|
||||
|
||||
const handleDismissMessage = useMutation({
|
||||
mutationFn: dismissMessage,
|
||||
onError: (error) => {
|
||||
dispatchToastMessage({ type: 'error', message: error });
|
||||
},
|
||||
onSuccess: () => {
|
||||
dispatchToastMessage({ type: 'success', message: t('Moderation_Reports_dismissed') });
|
||||
},
|
||||
});
|
||||
|
||||
const onDismissMessage = async () => {
|
||||
await handleDismissMessage.mutateAsync({ msgId });
|
||||
queryClient.invalidateQueries({ queryKey: ['moderation', 'msgReports'] });
|
||||
setModal();
|
||||
};
|
||||
|
||||
const confirmDismissMessage = (): void => {
|
||||
setModal(
|
||||
<GenericModal
|
||||
title={t('Moderation_Dismiss_reports')}
|
||||
confirmText={t('Moderation_Dismiss_reports')}
|
||||
variant='danger'
|
||||
onConfirm={() => onDismissMessage()}
|
||||
onCancel={() => setModal()}
|
||||
>
|
||||
{t('Moderation_Dismiss_reports_confirm')}
|
||||
</GenericModal>,
|
||||
);
|
||||
};
|
||||
|
||||
return {
|
||||
action: () => confirmDismissMessage(),
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,60 @@
|
||||
import type { GenericMenuItemProps } from '@rocket.chat/ui-client';
|
||||
import { GenericModal } from '@rocket.chat/ui-client';
|
||||
import { useEndpoint, useRouter, useSetModal, useToastMessageDispatch, useRouteParameter } from '@rocket.chat/ui-contexts';
|
||||
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
const useDismissUserAction = (userId: string, isUserReport?: boolean): GenericMenuItemProps => {
|
||||
const { t } = useTranslation();
|
||||
const setModal = useSetModal();
|
||||
const dispatchToastMessage = useToastMessageDispatch();
|
||||
const moderationRoute = useRouter();
|
||||
const tab = useRouteParameter('tab');
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
const dismissMsgReports = useEndpoint('POST', '/v1/moderation.dismissReports');
|
||||
|
||||
const dismissUserReports = useEndpoint('POST', '/v1/moderation.dismissUserReports');
|
||||
|
||||
const dismissUser = isUserReport ? dismissUserReports : dismissMsgReports;
|
||||
|
||||
const handleDismissUser = useMutation({
|
||||
mutationFn: dismissUser,
|
||||
onError: (error) => {
|
||||
dispatchToastMessage({ type: 'error', message: error });
|
||||
},
|
||||
onSuccess: () => {
|
||||
dispatchToastMessage({ type: 'success', message: t('Moderation_Reports_all_dismissed') });
|
||||
},
|
||||
});
|
||||
|
||||
const onDismissUser = async () => {
|
||||
await handleDismissUser.mutateAsync({ userId });
|
||||
queryClient.invalidateQueries({ queryKey: ['moderation', 'userReports'] });
|
||||
setModal();
|
||||
moderationRoute.navigate(`/admin/moderation/${tab}`, { replace: true });
|
||||
};
|
||||
|
||||
const confirmDismissUser = (): void => {
|
||||
setModal(
|
||||
<GenericModal
|
||||
title={t('Moderation_Dismiss_all_reports')}
|
||||
confirmText={t('Moderation_Dismiss_all_reports')}
|
||||
variant='danger'
|
||||
onConfirm={() => onDismissUser()}
|
||||
onCancel={() => setModal()}
|
||||
>
|
||||
{t('Moderation_Dismiss_all_reports_confirm')}
|
||||
</GenericModal>,
|
||||
);
|
||||
};
|
||||
|
||||
return {
|
||||
id: 'approve',
|
||||
content: t('Moderation_Dismiss_reports'),
|
||||
icon: 'circle-check',
|
||||
onClick: () => confirmDismissUser(),
|
||||
};
|
||||
};
|
||||
|
||||
export default useDismissUserAction;
|
||||
@@ -0,0 +1,53 @@
|
||||
import type { GenericMenuItemProps } from '@rocket.chat/ui-client';
|
||||
import { GenericModal } from '@rocket.chat/ui-client';
|
||||
import { useEndpoint, useSetModal, useToastMessageDispatch } from '@rocket.chat/ui-contexts';
|
||||
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
const useResetAvatarAction = (userId: string): GenericMenuItemProps => {
|
||||
const { t } = useTranslation();
|
||||
const setModal = useSetModal();
|
||||
const dispatchToastMessage = useToastMessageDispatch();
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
const resetAvatar = useEndpoint('POST', '/v1/users.resetAvatar');
|
||||
|
||||
const handleResetAvatar = useMutation({
|
||||
mutationFn: resetAvatar,
|
||||
onError: (error) => {
|
||||
dispatchToastMessage({ type: 'error', message: error });
|
||||
},
|
||||
onSuccess: () => {
|
||||
dispatchToastMessage({ type: 'success', message: t('Moderation_Avatar_reset_success') });
|
||||
},
|
||||
});
|
||||
|
||||
const onResetAvatar = async () => {
|
||||
setModal();
|
||||
await handleResetAvatar.mutateAsync({ userId });
|
||||
queryClient.invalidateQueries({ queryKey: ['moderation'] });
|
||||
};
|
||||
|
||||
const confirmResetAvatar = (): void => {
|
||||
setModal(
|
||||
<GenericModal
|
||||
title={t('Moderation_Reset_user_avatar')}
|
||||
confirmText={t('Reset')}
|
||||
variant='danger'
|
||||
onConfirm={() => onResetAvatar()}
|
||||
onCancel={() => setModal()}
|
||||
>
|
||||
{t('Moderation_Are_you_sure_you_want_to_reset_the_avatar')}
|
||||
</GenericModal>,
|
||||
);
|
||||
};
|
||||
|
||||
return {
|
||||
id: 'resetAvatar',
|
||||
content: t('Moderation_Reset_user_avatar'),
|
||||
icon: 'reload',
|
||||
onClick: () => confirmResetAvatar(),
|
||||
};
|
||||
};
|
||||
|
||||
export default useResetAvatarAction;
|
||||
Reference in New Issue
Block a user