import { EmojiType, IEmojiIcon } from '@vev/utils'; import React, { useState } from 'react'; import { useFormField } from '../../hooks/form'; import { SilkeBox } from '../silke-box'; import { SilkeButtonProps } from '../silke-button'; import { FormFieldProps, FormValidator } from '../silke-form'; import { SilkeIcons } from '../silke-icon/silke-icon'; import { SilkeOverflowMenu } from '../silke-overflow-menu'; import { SilkeTab, SilkeTabs } from '../silke-tabs'; import { SilkeText } from '../silke-text'; import EmojiTab from './emoji-tab'; import IconsTab from './icons-tab'; import UploadTab from './upload-tab'; type SilkeIconPickerProps = { fallback?: SilkeIcons; required?: boolean; type?: 'emojis' | 'icon' | 'upload'; } & FormFieldProps & Omit; const validate: FormValidator = (props, value) => { if (props.required && value === undefined) return 'Required'; }; export function SilkeIconPicker(props: SilkeIconPickerProps) { const { fallback, value, label, className, name, required, kind, size, type: singleType, title, onChange, } = useFormField(props, validate); const [type, setType] = useState( singleType === 'emojis' ? EmojiType.emoji : singleType === 'icon' ? EmojiType.icon : singleType === 'upload' ? EmojiType.upload : EmojiType.emoji, ); const [open, setOpen] = useState(false); const handleSelect = (icon: IEmojiIcon | null) => { setOpen(false); onChange(icon); }; const button = ( {!singleType && ( setType(EmojiType.emoji)} /> setType(EmojiType.icon)} /> setType(EmojiType.upload)} /> )} {type === EmojiType.emoji ? ( ) : type === EmojiType.icon ? ( ) : ( )} ); if (!label) return button; return ( {button} {label && {label}} ); }