import classNames from 'classnames'; import React, { ElementType, FC, HTMLAttributes, InputHTMLAttributes } from 'react'; import { Icon } from '../Icon/Icon'; import { Progress } from '../Progress/Progress'; import { useUploadContext } from './useUploadContext'; export interface UploadListItemProps extends HTMLAttributes { /** Classi aggiuntive da usare per il componente lista del UploadList */ className?: string; /** * Indica l'icona del file * @default it-file */ icon?: string; /** * Indica lo stato dell'upload * @default success */ uploadStatus?: 'success' | 'uploading' | 'error'; /** Utilizzarlo in caso di utilizzo di componenti personalizzati */ buttonTag?: ElementType; /** Nome del file */ fileName?: string; /** Peso del file */ fileWeight?: string; /** Valore della barra progress in caso uploadStatus sia uploading */ progressValue?: number; /** Indica che gli item list hanno l'immagine come anteprima */ previewImage?: boolean; previewImageSrc?: string; previewImageAlt?: string; testId?: string; } export const UploadListItem: FC & { UploadButton: typeof UploadButton; } = ({ className, icon = 'it-file', uploadStatus = 'success', buttonTag = 'button', progressValue, previewImage, previewImageSrc, previewImageAlt, fileName, fileWeight, children }) => { const tipologia = useUploadContext(), classes = classNames( { 'upload-file': tipologia === 'file', success: uploadStatus === 'success' && tipologia === 'file', uploading: uploadStatus === 'uploading' && tipologia === 'file', error: uploadStatus === 'error' && tipologia === 'file' }, className ), classesProgress = classNames({ 'progress-image': previewImage }), ButtonTag = buttonTag; const elementiListItem = { success: { testoVHFile: 'File caricato:', testoVHRightIcon: 'Caricamento ultimato', rightIcon: 'it-check' }, uploading: { testoVHFile: 'File caricato:', testoVHRightIcon: 'Annulla caricamento', rightIcon: 'it-close' }, error: { testoVHFile: 'Errore caricamento file:', testoVHRightIcon: 'Elimina file caricato', rightIcon: 'it-close' } }; return (
  • {children} {previewImage ? (
    {previewImageAlt}
    ) : ( tipologia === 'file' && )} {tipologia === 'file' && ( <>

    {elementiListItem[uploadStatus].testoVHFile} {fileName} {uploadStatus === 'success' && {fileWeight}}

    {elementiListItem[uploadStatus].testoVHRightIcon} {uploadStatus === 'uploading' && } )}
  • ); }; const UploadButton: FC> = ({ id, children, ...props }) => { return ( <> ); }; UploadListItem.UploadButton = UploadButton;