import { useState } from 'react' import { Button, Flex, HStack, Stack } from '@chakra-ui/react' import { UploadButton } from './UploadButton' import { GiphyPicker } from './GiphyPicker' import { TextInput } from '../inputs/TextInput' import { EmojiSearchableList } from './emoji/EmojiSearchableList' import { UnsplashPicker } from './UnsplashPicker' import { IconPicker } from './IconPicker' type Tabs = 'link' | 'upload' | 'giphy' | 'emoji' | 'unsplash' | 'icon' type Props = { filePath: string | undefined includeFileName?: boolean defaultUrl?: string imageSize?: 'small' | 'regular' | 'thumb' initialTab?: Tabs onSubmit: (url: string) => void onClose?: () => void } & ( | { includedTabs?: Tabs[] } | { excludedTabs?: Tabs[] } ) const defaultDisplayedTabs: Tabs[] = [ 'link', 'upload', 'giphy', 'emoji', 'unsplash', 'icon', ] export const ImageUploadContent = ({ filePath, includeFileName, defaultUrl, onSubmit, imageSize = 'regular', onClose, initialTab, ...props }: Props) => { const includedTabs = 'includedTabs' in props ? props.includedTabs ?? defaultDisplayedTabs : defaultDisplayedTabs const excludedTabs = 'excludedTabs' in props ? props.excludedTabs ?? [] : [] const displayedTabs = defaultDisplayedTabs.filter( (tab) => !excludedTabs.includes(tab) && includedTabs.includes(tab) ) const [currentTab, setCurrentTab] = useState( initialTab ?? displayedTabs[0] ) const handleSubmit = (url: string) => { onSubmit(url) onClose && onClose() } return ( {displayedTabs.includes('link') && ( )} {displayedTabs.includes('upload') && ( )} {displayedTabs.includes('emoji') && ( )} {displayedTabs.includes('giphy') && ( )} {displayedTabs.includes('unsplash') && ( )} {displayedTabs.includes('icon') && ( )} ) } const BodyContent = ({ includeFileName, filePath, tab, defaultUrl, imageSize, onSubmit, }: { includeFileName?: boolean filePath: string | undefined tab: Tabs defaultUrl?: string imageSize: 'small' | 'regular' | 'thumb' onSubmit: (url: string) => void }) => { switch (tab) { case 'upload': { if (!filePath) return null return ( ) } case 'link': return case 'giphy': return case 'emoji': return case 'unsplash': return case 'icon': return } } type ContentProps = { onNewUrl: (url: string) => void } const UploadFileContent = ({ filePath, includeFileName, onNewUrl, }: ContentProps & { filePath: string; includeFileName?: boolean }) => ( Choose an image ) const EmbedLinkContent = ({ defaultUrl, onNewUrl, }: ContentProps & { defaultUrl?: string }) => ( ) const GiphyContent = ({ onNewUrl }: ContentProps) => ( )