import { Box } from '@rocket.chat/fuselage';
import { GenericMenu, HeaderToolbarAction } from '@rocket.chat/ui-client';
import { useToastMessageDispatch } from '@rocket.chat/ui-contexts';
import type { RoomToolboxActionConfig } from '@rocket.chat/ui-contexts';
import { useMemo } from 'react';
import { useTranslation } from 'react-i18next';
import { Utilities } from '../../../ee/lib/misc/Utilities';
import { UiKitTriggerTimeoutError } from '../../lib/errors/UiKitTriggerTimeoutError';
import { useUiKitActionManager } from '../../uikit/hooks/useUiKitActionManager';
import { useRoom } from '../../views/room/contexts/RoomContext';
import { useAppActionButtons } from '../useAppActionButtons';
import { useApplyButtonFilters } from '../useApplyButtonFilters';
export const useAppsRoomStarActions = () => {
const result = useAppActionButtons('roomAction');
const actionManager = useUiKitActionManager();
const applyButtonFilters = useApplyButtonFilters('ai');
const room = useRoom();
const { t } = useTranslation();
const dispatchToastMessage = useToastMessageDispatch();
return useMemo((): RoomToolboxActionConfig | undefined => {
if (!result.data) {
return undefined;
}
const filteredActions = result.data.filter(applyButtonFilters);
if (filteredActions.length === 0) {
return undefined;
}
return {
id: 'ai-actions',
title: 'AI_Actions',
icon: 'stars',
groups: ['group', 'channel', 'live', 'team', 'direct', 'direct_multiple'],
featured: true,
order: 3,
renderToolboxItem: ({ id, icon, title, disabled, className }) => (
}
key={id}
title={title}
disabled={disabled}
items={filteredActions.map((action) => ({
id: action.actionId,
icon: undefined,
title: Utilities.getI18nKeyForApp(action.labelI18n, action.appId),
content: {t(`${Utilities.getI18nKeyForApp(action.labelI18n, action.appId)}`)},
variant: action.variant,
groups: ['group', 'channel', 'live', 'team', 'direct', 'direct_multiple'],
onClick: () => {
void actionManager
.emitInteraction(action.appId, {
type: 'actionButton',
actionId: action.actionId,
rid: room._id,
payload: { context: action.context },
})
.catch(async (reason) => {
if (reason instanceof UiKitTriggerTimeoutError) {
dispatchToastMessage({
type: 'error',
message: t('UIKit_Interaction_Timeout'),
});
return;
}
return reason;
});
},
type: 'apps',
}))}
className={className}
placement='bottom-start'
icon={icon}
/>
),
};
}, [actionManager, applyButtonFilters, dispatchToastMessage, result.data, room._id, t]);
};