emoji-picker-react
Version:
Emoji Picker component for React Applications on the web
52 lines (40 loc) • 1.45 kB
text/typescript
import { useRef, useMemo } from 'react';
import { useEmojiVersionConfig } from '../config/useConfig';
import { DataEmoji } from '../dataUtils/DataTypes';
import {
addedIn,
allEmojis,
emojiUnified,
unifiedWithoutSkinTone
} from '../dataUtils/emojiSelectors';
import { useIsUnicodeHidden } from './useHideEmojisByUniocode';
export function useDisallowedEmojis() {
const DisallowedEmojisRef = useRef<Record<string, boolean>>({});
const emojiVersionConfig = useEmojiVersionConfig();
return useMemo(() => {
const emojiVersion = parseFloat(`${emojiVersionConfig}`);
if (!emojiVersionConfig || Number.isNaN(emojiVersion)) {
return DisallowedEmojisRef.current;
}
return allEmojis.reduce((disallowedEmojis, emoji) => {
if (addedInNewerVersion(emoji, emojiVersion)) {
disallowedEmojis[emojiUnified(emoji)] = true;
}
return disallowedEmojis;
}, DisallowedEmojisRef.current);
}, [emojiVersionConfig]);
}
export function useIsEmojiDisallowed() {
const disallowedEmojis = useDisallowedEmojis();
const isUnicodeHidden = useIsUnicodeHidden();
return function isEmojiDisallowed(emoji: DataEmoji) {
const unified = unifiedWithoutSkinTone(emojiUnified(emoji));
return Boolean(disallowedEmojis[unified] || isUnicodeHidden(unified));
};
}
function addedInNewerVersion(
emoji: DataEmoji,
supportedLevel: number
): boolean {
return addedIn(emoji) > supportedLevel;
}