chore: Remove hideRoom client meteor method (#33766)

pull/33988/head^2
Aleksander Nicacio da Silva 1 year ago committed by GitHub
parent 3a66c37edd
commit 8420101e2c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 95
      apps/meteor/client/hooks/useHideRoomAction.tsx
  2. 11
      apps/meteor/client/lib/mutationEffects/updateSubscription.ts
  3. 25
      apps/meteor/client/methods/hideRoom.ts
  4. 1
      apps/meteor/client/methods/index.ts
  5. 51
      apps/meteor/client/sidebar/RoomMenu.tsx
  6. 51
      apps/meteor/client/sidebarv2/RoomMenu.tsx
  7. 43
      apps/meteor/client/views/room/contextualBar/Info/hooks/actions/useRoomHide.tsx
  8. 5
      apps/meteor/client/views/room/contextualBar/Info/hooks/useRoomActions.ts
  9. 50
      apps/meteor/client/views/teams/contextualBar/info/TeamsInfoWithData.tsx

@ -0,0 +1,95 @@
import type { RoomType } from '@rocket.chat/core-typings';
import { useEffectEvent } from '@rocket.chat/fuselage-hooks';
import type { TranslationKey } from '@rocket.chat/ui-contexts';
import { useEndpoint, useSetModal, useToastMessageDispatch, useRouter, useUserId } from '@rocket.chat/ui-contexts';
import { useMutation } from '@tanstack/react-query';
import React from 'react';
import { useTranslation } from 'react-i18next';
import { useDontAskAgain } from './useDontAskAgain';
import { UiTextContext } from '../../definition/IRoomTypeConfig';
import { GenericModalDoNotAskAgain } from '../components/GenericModal';
import { updateSubscription } from '../lib/mutationEffects/updateSubscription';
import { roomCoordinator } from '../lib/rooms/roomCoordinator';
type HideRoomProps = {
rid: string;
type: RoomType;
name: string;
};
type HideRoomOptions = {
redirect?: boolean;
};
const CLOSE_ENDPOINTS_BY_ROOM_TYPE = {
p: '/v1/groups.close', // private
c: '/v1/channels.close', // channel
d: '/v1/im.close', // direct message
v: '/v1/channels.close', // omnichannel voip
l: '/v1/channels.close', // livechat
} as const;
export const useHideRoomAction = ({ rid: roomId, type, name }: HideRoomProps, { redirect = true }: HideRoomOptions = {}) => {
const { t } = useTranslation();
const setModal = useSetModal();
const closeModal = useEffectEvent(() => setModal());
const dispatchToastMessage = useToastMessageDispatch();
const dontAskHideRoom = useDontAskAgain('hideRoom');
const router = useRouter();
const userId = useUserId();
const hideRoomEndpoint = useEndpoint('POST', CLOSE_ENDPOINTS_BY_ROOM_TYPE[type]);
const hideRoom = useMutation({
mutationFn: () => hideRoomEndpoint({ roomId }),
onMutate: async () => {
closeModal();
if (userId) {
return updateSubscription(roomId, userId, { alert: false, open: false });
}
},
onSuccess: () => {
if (redirect) {
router.navigate('/home');
}
},
onError: async (error, _, rollbackDocument) => {
dispatchToastMessage({ type: 'error', message: error });
if (userId && rollbackDocument) {
const { alert, open } = rollbackDocument;
updateSubscription(roomId, userId, { alert, open });
}
},
});
const handleHide = useEffectEvent(async () => {
const warnText = roomCoordinator.getRoomDirectives(type).getUiText(UiTextContext.HIDE_WARNING);
if (dontAskHideRoom) {
hideRoom.mutate();
return;
}
setModal(
<GenericModalDoNotAskAgain
variant='danger'
confirmText={t('Yes_hide_it')}
cancelText={t('Cancel')}
onClose={closeModal}
onCancel={closeModal}
onConfirm={() => hideRoom.mutate()}
dontAskAgain={{
action: 'hideRoom',
label: t('Hide_room'),
}}
>
{t(warnText as TranslationKey, { postProcess: 'sprintf', sprintf: [name] })}
</GenericModalDoNotAskAgain>,
);
});
return handleHide;
};

@ -0,0 +1,11 @@
import type { ISubscription } from '@rocket.chat/core-typings';
import { Subscriptions } from '../../../app/models/client';
export const updateSubscription = (roomId: string, userId: string, data: Partial<ISubscription>) => {
const oldDocument = Subscriptions.findOne({ 'rid': roomId, 'u._id': userId });
Subscriptions.update({ 'rid': roomId, 'u._id': userId }, { $set: data });
return oldDocument;
};

@ -1,25 +0,0 @@
import type { ServerMethods } from '@rocket.chat/ddp-client';
import { Meteor } from 'meteor/meteor';
import { Subscriptions } from '../../app/models/client';
Meteor.methods<ServerMethods>({
async hideRoom(rid) {
if (!Meteor.userId()) {
return 0;
}
return Subscriptions.update(
{
rid,
'u._id': Meteor.userId(),
},
{
$set: {
alert: false,
open: false,
},
},
);
},
});

@ -1,4 +1,3 @@
import './hideRoom';
import './openRoom';
import './pinMessage';
import './unpinMessage';

@ -19,9 +19,8 @@ import React, { memo, useMemo } from 'react';
import { LegacyRoomManager } from '../../app/ui-utils/client';
import { UiTextContext } from '../../definition/IRoomTypeConfig';
import { GenericModalDoNotAskAgain } from '../components/GenericModal';
import WarningModal from '../components/WarningModal';
import { useDontAskAgain } from '../hooks/useDontAskAgain';
import { useHideRoomAction } from '../hooks/useHideRoomAction';
import { roomCoordinator } from '../lib/rooms/roomCoordinator';
import { useOmnichannelPrioritiesMenu } from '../omnichannel/hooks/useOmnichannelPrioritiesMenu';
@ -43,15 +42,6 @@ type RoomMenuProps = {
hideDefaultOptions: boolean;
};
const closeEndpoints = {
p: '/v1/groups.close',
c: '/v1/channels.close',
d: '/v1/im.close',
v: '/v1/channels.close',
l: '/v1/groups.close',
} as const;
const leaveEndpoints = {
p: '/v1/groups.leave',
c: '/v1/channels.leave',
@ -84,9 +74,6 @@ const RoomMenu = ({
const canFavorite = useSetting('Favorite_Rooms');
const isFavorite = Boolean(subscription?.f);
const dontAskHideRoom = useDontAskAgain('hideRoom');
const hideRoom = useEndpoint('POST', closeEndpoints[type]);
const readMessages = useEndpoint('POST', '/v1/subscriptions.read');
const toggleFavorite = useEndpoint('POST', '/v1/rooms.favorite');
const leaveRoom = useEndpoint('POST', leaveEndpoints[type]);
@ -103,6 +90,8 @@ const RoomMenu = ({
const queryClient = useQueryClient();
const handleHide = useHideRoomAction({ rid, type, name }, { redirect: false });
const canLeave = ((): boolean => {
if (type === 'c' && !canLeaveChannel) {
return false;
@ -140,40 +129,6 @@ const RoomMenu = ({
);
});
const handleHide = useMutableCallback(async () => {
const hide = async (): Promise<void> => {
try {
await hideRoom({ roomId: rid });
} catch (error) {
dispatchToastMessage({ type: 'error', message: error });
}
closeModal();
};
const warnText = roomCoordinator.getRoomDirectives(type).getUiText(UiTextContext.HIDE_WARNING);
if (dontAskHideRoom) {
return hide();
}
setModal(
<GenericModalDoNotAskAgain
variant='danger'
confirmText={t('Yes_hide_it')}
cancelText={t('Cancel')}
onClose={closeModal}
onCancel={closeModal}
onConfirm={hide}
dontAskAgain={{
action: 'hideRoom',
label: t('Hide_room'),
}}
>
{t(warnText as TranslationKey, name)}
</GenericModalDoNotAskAgain>,
);
});
const handleToggleRead = useMutableCallback(async () => {
try {
queryClient.invalidateQueries(['sidebar/search/spotlight']);

@ -19,9 +19,8 @@ import React, { memo, useMemo } from 'react';
import { LegacyRoomManager } from '../../app/ui-utils/client';
import { UiTextContext } from '../../definition/IRoomTypeConfig';
import { GenericModalDoNotAskAgain } from '../components/GenericModal';
import WarningModal from '../components/WarningModal';
import { useDontAskAgain } from '../hooks/useDontAskAgain';
import { useHideRoomAction } from '../hooks/useHideRoomAction';
import { roomCoordinator } from '../lib/rooms/roomCoordinator';
import { useOmnichannelPrioritiesMenu } from '../omnichannel/hooks/useOmnichannelPrioritiesMenu';
@ -43,15 +42,6 @@ type RoomMenuProps = {
hideDefaultOptions: boolean;
};
const closeEndpoints = {
p: '/v1/groups.close',
c: '/v1/channels.close',
d: '/v1/im.close',
v: '/v1/channels.close',
l: '/v1/groups.close',
} as const;
const leaveEndpoints = {
p: '/v1/groups.leave',
c: '/v1/channels.leave',
@ -84,9 +74,6 @@ const RoomMenu = ({
const canFavorite = useSetting('Favorite_Rooms');
const isFavorite = Boolean(subscription?.f);
const dontAskHideRoom = useDontAskAgain('hideRoom');
const hideRoom = useEndpoint('POST', closeEndpoints[type]);
const readMessages = useEndpoint('POST', '/v1/subscriptions.read');
const toggleFavorite = useEndpoint('POST', '/v1/rooms.favorite');
const leaveRoom = useEndpoint('POST', leaveEndpoints[type]);
@ -103,6 +90,8 @@ const RoomMenu = ({
const queryClient = useQueryClient();
const handleHide = useHideRoomAction({ rid, type, name }, { redirect: false });
const canLeave = ((): boolean => {
if (type === 'c' && !canLeaveChannel) {
return false;
@ -140,40 +129,6 @@ const RoomMenu = ({
);
});
const handleHide = useEffectEvent(async () => {
const hide = async (): Promise<void> => {
try {
await hideRoom({ roomId: rid });
} catch (error) {
dispatchToastMessage({ type: 'error', message: error });
}
closeModal();
};
const warnText = roomCoordinator.getRoomDirectives(type).getUiText(UiTextContext.HIDE_WARNING);
if (dontAskHideRoom) {
return hide();
}
setModal(
<GenericModalDoNotAskAgain
variant='danger'
confirmText={t('Yes_hide_it')}
cancelText={t('Cancel')}
onClose={closeModal}
onCancel={closeModal}
onConfirm={hide}
dontAskAgain={{
action: 'hideRoom',
label: t('Hide_room'),
}}
>
{t(warnText as TranslationKey, name)}
</GenericModalDoNotAskAgain>,
);
});
const handleToggleRead = useEffectEvent(async () => {
try {
queryClient.invalidateQueries(['sidebar/search/spotlight']);

@ -1,43 +0,0 @@
import type { IRoom } from '@rocket.chat/core-typings';
import { useMutableCallback } from '@rocket.chat/fuselage-hooks';
import type { TranslationKey } from '@rocket.chat/ui-contexts';
import { useSetModal, useToastMessageDispatch, useMethod, useTranslation, useRouter } from '@rocket.chat/ui-contexts';
import React from 'react';
import { UiTextContext } from '../../../../../../../definition/IRoomTypeConfig';
import WarningModal from '../../../../../../components/WarningModal';
import { roomCoordinator } from '../../../../../../lib/rooms/roomCoordinator';
export const useRoomHide = (room: IRoom) => {
const t = useTranslation();
const setModal = useSetModal();
const dispatchToastMessage = useToastMessageDispatch();
const hideRoom = useMethod('hideRoom');
const router = useRouter();
const handleHide = useMutableCallback(async () => {
const hide = async () => {
try {
await hideRoom(room._id);
router.navigate('/home');
} catch (error) {
dispatchToastMessage({ type: 'error', message: error });
}
setModal(null);
};
const warnText = roomCoordinator.getRoomDirectives(room.t).getUiText(UiTextContext.HIDE_WARNING);
setModal(
<WarningModal
text={t(warnText as TranslationKey, room.fname || room.name)}
confirmText={t('Yes_hide_it')}
close={() => setModal(null)}
cancelText={t('Cancel')}
confirm={hide}
/>,
);
});
return handleHide;
};

@ -3,9 +3,9 @@ import { useMemo } from 'react';
import { useTranslation } from 'react-i18next';
import { useRoomConvertToTeam } from './actions/useRoomConvertToTeam';
import { useRoomHide } from './actions/useRoomHide';
import { useRoomLeave } from './actions/useRoomLeave';
import { useRoomMoveToTeam } from './actions/useRoomMoveToTeam';
import { useHideRoomAction } from '../../../../../hooks/useHideRoomAction';
import { useDeleteRoom } from '../../../../hooks/roomActions/useDeleteRoom';
type UseRoomActionsOptions = {
@ -18,11 +18,12 @@ export const useRoomActions = (room: IRoom, options: UseRoomActionsOptions) => {
const { onClickEnterRoom, onClickEdit, resetState } = options;
const { t } = useTranslation();
const handleHide = useRoomHide(room);
const handleLeave = useRoomLeave(room);
const { handleDelete, canDeleteRoom } = useDeleteRoom(room, { reload: resetState });
const handleMoveToTeam = useRoomMoveToTeam(room);
const handleConvertToTeam = useRoomConvertToTeam(room);
const handleHide = useHideRoomAction({ rid: room._id, type: room.t, name: room.name ?? '' });
return useMemo(() => {
const memoizedActions = {

@ -1,17 +1,13 @@
import type { IRoom, Serialized } from '@rocket.chat/core-typings';
import { useMutableCallback } from '@rocket.chat/fuselage-hooks';
import type { TranslationKey } from '@rocket.chat/ui-contexts';
import { useSetModal, useToastMessageDispatch, useUserId, usePermission, useMethod, useRouter } from '@rocket.chat/ui-contexts';
import { useSetModal, useToastMessageDispatch, useUserId, usePermission, useRouter } from '@rocket.chat/ui-contexts';
import React, { useCallback } from 'react';
import { useTranslation } from 'react-i18next';
import LeaveTeam from './LeaveTeam';
import TeamsInfo from './TeamsInfo';
import { UiTextContext } from '../../../../../definition/IRoomTypeConfig';
import { GenericModalDoNotAskAgain } from '../../../../components/GenericModal';
import { useDontAskAgain } from '../../../../hooks/useDontAskAgain';
import { useEndpointAction } from '../../../../hooks/useEndpointAction';
import { roomCoordinator } from '../../../../lib/rooms/roomCoordinator';
import { useHideRoomAction } from '../../../../hooks/useHideRoomAction';
import { useDeleteRoom } from '../../../hooks/roomActions/useDeleteRoom';
import { useRoom } from '../../../room/contexts/RoomContext';
import { useRoomToolbox } from '../../../room/contexts/RoomToolboxContext';
@ -27,8 +23,6 @@ const TeamsInfoWithLogic = ({ openEditing }: TeamsInfoWithLogicProps) => {
const { t } = useTranslation();
const userId = useUserId();
const dontAskHideRoom = useDontAskAgain('hideRoom');
const dispatchToastMessage = useToastMessageDispatch();
const setModal = useSetModal();
const closeModal = useMutableCallback(() => setModal());
@ -36,7 +30,7 @@ const TeamsInfoWithLogic = ({ openEditing }: TeamsInfoWithLogicProps) => {
const leaveTeam = useEndpointAction('POST', '/v1/teams.leave');
const convertTeamToChannel = useEndpointAction('POST', '/v1/teams.convertToChannel');
const hideTeam = useMethod('hideRoom');
const hideTeam = useHideRoomAction({ rid: room._id, type: room.t, name: room.name ?? '' });
const router = useRouter();
@ -68,42 +62,6 @@ const TeamsInfoWithLogic = ({ openEditing }: TeamsInfoWithLogicProps) => {
setModal(<LeaveTeam onConfirm={onConfirm} onCancel={closeModal} teamId={room.teamId!} />);
});
const handleHide = useMutableCallback(async () => {
const hide = async () => {
try {
await hideTeam(room._id);
router.navigate('/home');
} catch (error) {
dispatchToastMessage({ type: 'error', message: error });
} finally {
closeModal();
}
};
const warnText = roomCoordinator.getRoomDirectives(room.t).getUiText(UiTextContext.HIDE_WARNING) as TranslationKey;
if (dontAskHideRoom) {
return hide();
}
setModal(
<GenericModalDoNotAskAgain
variant='danger'
confirmText={t('Yes_hide_it')}
cancelText={t('Cancel')}
onClose={closeModal}
onCancel={closeModal}
onConfirm={hide}
dontAskAgain={{
action: 'hideRoom',
label: t('Hide_room'),
}}
>
{t(warnText, { postProcess: 'sprintf', sprintf: [room.fname] })}
</GenericModalDoNotAskAgain>,
);
});
const onClickViewChannels = useCallback(() => openTab('team-channels'), [openTab]);
const onClickConvertToChannel = useMutableCallback(() => {
@ -134,7 +92,7 @@ const TeamsInfoWithLogic = ({ openEditing }: TeamsInfoWithLogicProps) => {
onClickClose={closeTab}
onClickDelete={canDeleteRoom ? handleDelete : undefined}
onClickLeave={onClickLeave}
onClickHide={handleHide}
onClickHide={hideTeam}
onClickViewChannels={onClickViewChannels}
onClickConvertToChannel={canEdit ? onClickConvertToChannel : undefined}
/>

Loading…
Cancel
Save