RocketChat/Rocket.Chat

View on GitHub
apps/meteor/client/components/message/list/MessageListContext.tsx

Summary

Maintainability
A
0 mins
Test Coverage
import type { IMessage } from '@rocket.chat/core-typings';
import { createContext, useContext } from 'react';

export type MessageListContextValue = {
    useShowTranslated: (message: IMessage) => boolean;
    useShowStarred: ({ message }: { message: IMessage }) => boolean;
    useShowFollowing: ({ message }: { message: IMessage }) => boolean;
    useMessageDateFormatter: () => (date: Date) => string;
    useUserHasReacted: (message: IMessage) => (reaction: string) => boolean;
    useOpenEmojiPicker: (message: IMessage) => (event: React.MouseEvent | React.KeyboardEvent) => void;
    showRoles: boolean;
    showRealName: boolean;
    showUsername: boolean;
    highlights?:
        | {
                highlight: string;
                regex: RegExp;
                urlRegex: RegExp;
          }[];
    katex?: {
        dollarSyntaxEnabled: boolean;
        parenthesisSyntaxEnabled: boolean;
    };
    autoTranslateLanguage?: string;
    showColors: boolean;
    jumpToMessageParam?: string;
    username: string | undefined;
    messageListRef?: React.RefObject<HTMLElement>;
};

export const MessageListContext = createContext<MessageListContextValue>({
    useShowTranslated: () => false,
    useShowStarred: () => false,
    useShowFollowing: () => false,
    useUserHasReacted: () => (): boolean => false,
    useMessageDateFormatter:
        () =>
        (date: Date): string =>
            date.toString(),
    useOpenEmojiPicker: () => (): void => undefined,
    showRoles: false,
    showRealName: false,
    showUsername: false,
    showColors: false,
    username: undefined,
    messageListRef: { current: null },
});

export const useShowTranslated: MessageListContextValue['useShowTranslated'] = (...args) =>
    useContext(MessageListContext).useShowTranslated(...args);
export const useShowStarred: MessageListContextValue['useShowStarred'] = (...args) =>
    useContext(MessageListContext).useShowStarred(...args);
export const useShowFollowing: MessageListContextValue['useShowFollowing'] = (...args) =>
    useContext(MessageListContext).useShowFollowing(...args);
export const useMessageDateFormatter: MessageListContextValue['useMessageDateFormatter'] = (...args) =>
    useContext(MessageListContext).useMessageDateFormatter(...args);
export const useMessageListShowRoles = (): MessageListContextValue['showRoles'] => useContext(MessageListContext).showRoles;
export const useMessageListShowRealName = (): MessageListContextValue['showRealName'] => useContext(MessageListContext).showRealName;
export const useMessageListShowUsername = (): MessageListContextValue['showUsername'] => useContext(MessageListContext).showUsername;
export const useMessageListHighlights = (): MessageListContextValue['highlights'] => useContext(MessageListContext).highlights;
export const useMessageListJumpToMessageParam = (): MessageListContextValue['jumpToMessageParam'] =>
    useContext(MessageListContext).jumpToMessageParam;

export const useUserHasReacted: MessageListContextValue['useUserHasReacted'] = (message: IMessage) =>
    useContext(MessageListContext).useUserHasReacted(message);
export const useOpenEmojiPicker: MessageListContextValue['useOpenEmojiPicker'] = (...args) =>
    useContext(MessageListContext).useOpenEmojiPicker(...args);

export const useMessageListRef = (): MessageListContextValue['messageListRef'] => useContext(MessageListContext).messageListRef;