import * as React from 'react'; import classNames from 'classnames'; import { useIntl, FormattedMessage } from 'react-intl'; import { HatWand } from '@box/blueprint-web-assets/illustrations/Medium'; import UploadEmptyState from '../../icons/states/UploadEmptyState'; import UploadSuccessState from '../../icons/states/UploadSuccessState'; 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'; type Props = { 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, }: Props) => { const intl = 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 ? ( } onChange={onSelect} useButton /> ) : ( } folderInputLabel={ isFolderUploadEnabled && } message={ isFolderUploadEnabled ? ( ) : ( ) } onChange={onSelect} /> ); /* eslint-enable no-nested-ternary */ break; case VIEW_UPLOAD_IN_PROGRESS: icon = } />; content = } />; break; case VIEW_UPLOAD_SUCCESS: icon = } />; content = ( } folderInputLabel={ isFolderUploadEnabled && } message={} onChange={onSelect} useButton={isTouch} /> ); break; default: break; /* eslint-enable jsx-a11y/label-has-for */ } 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;