RocketChat/Rocket.Chat

View on GitHub
apps/meteor/client/components/message/content/actions/MessageAction.tsx

Summary

Maintainability
A
0 mins
Test Coverage
import { Button } from '@rocket.chat/fuselage';
import type { Keys as IconName } from '@rocket.chat/icons';
import type { TranslationKey } from '@rocket.chat/ui-contexts';
import { useTranslation } from '@rocket.chat/ui-contexts';
import type { ReactElement } from 'react';
import React from 'react';

const resolveLegacyIcon = (legacyIcon: IconName | `icon-${IconName | 'videocam'}`): IconName => {
    if (legacyIcon === 'icon-videocam') {
        return 'video';
    }

    return legacyIcon?.replace(/^icon-/, '') as IconName;
};

type MessageActionProps = {
    icon: IconName;
    i18nLabel?: TranslationKey;
    label?: string;
    methodId: string;
    runAction: (actionId: string) => () => void;
    danger?: boolean;
};

const MessageAction = ({ icon, methodId, i18nLabel, label, runAction, danger }: MessageActionProps): ReactElement => {
    const t = useTranslation();

    const resolvedIcon = resolveLegacyIcon(icon);

    return (
        <Button icon={resolvedIcon} data-method-id={methodId} onClick={runAction(methodId)} marginInline={4} small danger={danger}>
            {i18nLabel ? t(i18nLabel) : label}
        </Button>
    );
};

export default MessageAction;