RocketChat/Rocket.Chat

View on GitHub
apps/meteor/client/contexts/EmojiPickerContext.ts

Summary

Maintainability
B
4 hrs
Test Coverage
import { createContext, useContext } from 'react';

import type { EmojiByCategory } from '../../app/emoji/client';

type EmojiPickerContextValue = {
    open: (ref: Element, callback: (emoji: string) => void) => void;
    isOpen: boolean;
    close: () => void;
    emojiToPreview: { emoji: string; name: string } | null;
    handlePreview: (emoji: string, name: string) => void;
    handleRemovePreview: () => void;
    addRecentEmoji: (emoji: string) => void;
    getEmojiListsByCategory: () => EmojiByCategory[];
    recentEmojis: string[];
    setRecentEmojis: (emoji: string[]) => void;
    actualTone: number;
    currentCategory: string;
    setCurrentCategory: (category: string) => void;
    customItemsLimit: number;
    setCustomItemsLimit: (limit: number) => void;
    setActualTone: (tone: number) => void;
    quickReactions: { emoji: string; image: string }[];
};

export const EmojiPickerContext = createContext<EmojiPickerContextValue | undefined>(undefined);
const useEmojiPickerContext = (): EmojiPickerContextValue => {
    const context = useContext(EmojiPickerContext);
    if (!context) {
        throw new Error('Must be running in EmojiPicker Context');
    }

    return context;
};

export const useEmojiPicker = () => ({
    open: useEmojiPickerContext().open,
    isOpen: useEmojiPickerContext().isOpen,
    close: useEmojiPickerContext().close,
});

export const usePreviewEmoji = () => ({
    emojiToPreview: useEmojiPickerContext().emojiToPreview,
    handlePreview: useEmojiPickerContext().handlePreview,
    handleRemovePreview: useEmojiPickerContext().handleRemovePreview,
});

export const useEmojiPickerData = () => {
    const {
        actualTone,
        addRecentEmoji,
        currentCategory,
        customItemsLimit,
        getEmojiListsByCategory,
        quickReactions,
        recentEmojis,
        setActualTone,
        setCurrentCategory,
        setCustomItemsLimit,
        setRecentEmojis,
    } = useEmojiPickerContext();

    return {
        addRecentEmoji,
        getEmojiListsByCategory,
        recentEmojis,
        setRecentEmojis,
        actualTone,
        currentCategory,
        setCurrentCategory,
        customItemsLimit,
        setCustomItemsLimit,
        setActualTone,
        quickReactions,
    };
};