import { Option, Menu } from '@rocket.chat/fuselage';
import { useMutableCallback } from '@rocket.chat/fuselage-hooks';
import React, { memo, useMemo } from 'react';
import { RoomManager } from '../../app/ui-utils/client/lib/RoomManager';
import { UiTextContext } from '../../definition/IRoomTypeConfig';
import { GenericModalDoNotAskAgain } from '../components/GenericModal';
import { usePermission } from '../contexts/AuthorizationContext';
import { useSetModal } from '../contexts/ModalContext';
import { useRoute } from '../contexts/RouterContext';
import { useMethod } from '../contexts/ServerContext';
import { useSetting } from '../contexts/SettingsContext';
import { useToastMessageDispatch } from '../contexts/ToastMessagesContext';
import { useTranslation } from '../contexts/TranslationContext';
import { useUserSubscription } from '../contexts/UserContext';
import { useDontAskAgain } from '../hooks/useDontAskAgain';
import { roomCoordinator } from '../lib/rooms/roomCoordinator';
import WarningModal from '../views/admin/apps/WarningModal';
const fields = {
f: 1,
t: 1,
name: 1,
};
const RoomMenu = ({ rid, unread, threadUnread, alert, roomOpen, type, cl, name = '' }) => {
const t = useTranslation();
const dispatchToastMessage = useToastMessageDispatch();
const setModal = useSetModal();
const closeModal = useMutableCallback(() => setModal());
const router = useRoute('home');
const subscription = useUserSubscription(rid, fields);
const canFavorite = useSetting('Favorite_Rooms');
const isFavorite = (subscription != null ? subscription.f : undefined) != null && subscription.f;
const dontAskHideRoom = useDontAskAgain('hideRoom');
const hideRoom = useMethod('hideRoom');
const readMessages = useMethod('readMessages');
const unreadMessages = useMethod('unreadMessages');
const toggleFavorite = useMethod('toggleFavorite');
const leaveRoom = useMethod('leaveRoom');
const isUnread = alert || unread || threadUnread;
const canLeaveChannel = usePermission('leave-c');
const canLeavePrivate = usePermission('leave-p');
const canLeave = (() => {
if (type === 'c' && !canLeaveChannel) {
return false;
}
if (type === 'p' && !canLeavePrivate) {
return false;
}
return !((cl != null && !cl) || ['d', 'l'].includes(type));
})();
const handleLeave = useMutableCallback(() => {
const leave = async () => {
try {
await leaveRoom(rid);
if (roomOpen) {
router.push({});
}
RoomManager.close(rid);
} catch (error) {
dispatchToastMessage({ type: 'error', message: error });
}
closeModal();
};
const warnText = roomCoordinator.getRoomDirectives(type)?.getUiText(UiTextContext.LEAVE_WARNING);
setModal(