UNPKG

emoji-picker-react

Version:

Emoji Picker component for React Applications on the web

189 lines (153 loc) 4.9 kB
import * as React from 'react'; import { usePickerConfig } from '../components/context/PickerConfigContext'; import { EmojiClickData, EmojiStyle, SkinTonePickerLocation, SkinTones, SuggestionMode, Theme } from '../types/exposedTypes'; import { CategoriesConfig } from './categoryConfig'; import { DEFAULT_SEARCH_PLACEHOLDER, SEARCH_RESULTS_NO_RESULTS_FOUND, SEARCH_RESULTS_ONE_RESULT_FOUND, SEARCH_RESULTS_MULTIPLE_RESULTS_FOUND, PickerDimensions, PreviewConfig } from './config'; import { CustomEmoji } from './customEmojiConfig'; import { useMutableConfig } from './mutableConfig'; export enum MOUSE_EVENT_SOURCE { REACTIONS = 'reactions', PICKER = 'picker' } export function useSearchPlaceHolderConfig(): string { const { searchPlaceHolder, searchPlaceholder } = usePickerConfig(); return ( [searchPlaceHolder, searchPlaceholder].find( p => p !== DEFAULT_SEARCH_PLACEHOLDER ) ?? DEFAULT_SEARCH_PLACEHOLDER ); } export function useDefaultSkinToneConfig(): SkinTones { const { defaultSkinTone } = usePickerConfig(); return defaultSkinTone; } export function useAllowExpandReactions(): boolean { const { allowExpandReactions } = usePickerConfig(); return allowExpandReactions; } export function useSkinTonesDisabledConfig(): boolean { const { skinTonesDisabled } = usePickerConfig(); return skinTonesDisabled; } export function useEmojiStyleConfig(): EmojiStyle { const { emojiStyle } = usePickerConfig(); return emojiStyle; } export function useAutoFocusSearchConfig(): boolean { const { autoFocusSearch } = usePickerConfig(); return autoFocusSearch; } export function useCategoriesConfig(): CategoriesConfig { const { categories } = usePickerConfig(); return categories; } export function useCustomEmojisConfig(): CustomEmoji[] { const { customEmojis } = usePickerConfig(); return customEmojis; } export function useOpenConfig(): boolean { const { open } = usePickerConfig(); return open; } export function useOnEmojiClickConfig( mouseEventSource: MOUSE_EVENT_SOURCE ): (emoji: EmojiClickData, event: MouseEvent) => void { const { current } = useMutableConfig(); const handler = (mouseEventSource === MOUSE_EVENT_SOURCE.REACTIONS ? current.onReactionClick : current.onEmojiClick) ?? current.onEmojiClick; return handler || (() => {}); } export function useOnSkinToneChangeConfig( ): (skinTone: SkinTones) => void { const { current } = useMutableConfig(); return current.onSkinToneChange || (() => {}); } export function usePreviewConfig(): PreviewConfig { const { previewConfig } = usePickerConfig(); return previewConfig; } export function useThemeConfig(): Theme { const { theme } = usePickerConfig(); return theme; } export function useSuggestedEmojisModeConfig(): SuggestionMode { const { suggestedEmojisMode } = usePickerConfig(); return suggestedEmojisMode; } export function useLazyLoadEmojisConfig(): boolean { const { lazyLoadEmojis } = usePickerConfig(); return lazyLoadEmojis; } export function useClassNameConfig(): string { const { className } = usePickerConfig(); return className; } export function useStyleConfig(): React.CSSProperties { const { height, width, style } = usePickerConfig(); return { height: getDimension(height), width: getDimension(width), ...style }; } export function useReactionsOpenConfig(): boolean { const { reactionsDefaultOpen } = usePickerConfig(); return reactionsDefaultOpen; } export function useEmojiVersionConfig(): string | null { const { emojiVersion } = usePickerConfig(); return emojiVersion; } export function useSearchDisabledConfig(): boolean { const { searchDisabled } = usePickerConfig(); return searchDisabled; } export function useSkinTonePickerLocationConfig(): SkinTonePickerLocation { const { skinTonePickerLocation } = usePickerConfig(); return skinTonePickerLocation; } export function useUnicodeToHide() { const { unicodeToHide } = usePickerConfig(); return unicodeToHide; } export function useReactionsConfig(): string[] { const { reactions } = usePickerConfig(); return reactions; } export function useGetEmojiUrlConfig(): ( unified: string, style: EmojiStyle ) => string { const { getEmojiUrl } = usePickerConfig(); return getEmojiUrl; } function getDimension(dimensionConfig: PickerDimensions): PickerDimensions { return typeof dimensionConfig === 'number' ? `${dimensionConfig}px` : dimensionConfig; } export function useSearchResultsConfig(searchResultsCount: number): string { const hasResults = searchResultsCount > 0; const isPlural = searchResultsCount > 1; if (hasResults) { return isPlural ? SEARCH_RESULTS_MULTIPLE_RESULTS_FOUND.replace( '%n', searchResultsCount.toString() ) : SEARCH_RESULTS_ONE_RESULT_FOUND; } return SEARCH_RESULTS_NO_RESULTS_FOUND; }