import * as React from 'react'; import classNames from 'classnames'; import { useIntl } from 'react-intl'; import { DiscoDanceParty, HatWand, UploadCloud } from '@box/blueprint-web-assets/illustrations/Medium'; import UploadStateContent from './UploadStateContent'; import type { View } from '../../common/types/core'; import { VIEW_ERROR, VIEW_UPLOAD_EMPTY, VIEW_UPLOAD_IN_PROGRESS, VIEW_UPLOAD_SUCCESS } from '../../constants'; import messages from '../common/messages'; import './UploadState.scss'; export interface UploadStateProps { canDrop: boolean; hasItems: boolean; isFolderUploadEnabled: boolean; isOver: boolean; isTouch: boolean; onSelect: (event: React.ChangeEvent) => void; view: View; } const UploadState = ({ canDrop, hasItems, isOver, isTouch, view, onSelect, isFolderUploadEnabled, }: UploadStateProps) => { const { formatMessage } = useIntl(); let icon; let content; switch (view) { case VIEW_ERROR: icon = ; content = ; break; case VIEW_UPLOAD_EMPTY: icon = ; /* eslint-disable no-nested-ternary */ content = canDrop && hasItems ? ( ) : isTouch ? ( ) : ( ); /* eslint-enable no-nested-ternary */ break; case VIEW_UPLOAD_IN_PROGRESS: icon = ; content = ; break; case VIEW_UPLOAD_SUCCESS: icon = ; content = ( ); break; default: break; } const className = classNames('bcu-upload-state', { 'bcu-is-droppable': isOver && canDrop, 'bcu-is-not-droppable': isOver && !canDrop, 'bcu-has-items': hasItems, }); return (
{icon} {content}
); }; export default UploadState;