UNPKG

@bothub-chat/ui

Version:

Bothub UI Components

2 lines (1 loc) 1.42 kB
import{__awaiter as e}from"tslib";import{useState as i,useCallback as l,useEffect as t}from"react";import{getPreviewUrlForFile as n,isFileTypeAccepted as o,formatUploadFiles as a}from"./utils.js";const r=({initialFiles:r,uploadFileAccept:d,uploadFileLimit:s,uploadFileDisabled:u,emitError:p,onFilesChange:f})=>{const[v,m]=Array.isArray(r)?[r,f]:i([]),h=l(i=>e(void 0,void 0,void 0,function*(){if(!i.length)return;const e=[],l=[],t=yield Promise.all(null==i?void 0:i.map(n));for(const[n,a]of i.entries()){o(a.type,d)?e.push({previewUrl:t[n],name:a.name,native:a}):l.push(a)}l.length>0&&(null==p||p({name:"WRONG_FILES",payload:l})),(null==e?void 0:e.length)>0&&(null==m||m([...v,...e].slice(0,s)))}),[d,p,s,v]),c=l(i=>e(void 0,void 0,void 0,function*(){var e,l;if(u)return;const{clipboardData:t}=i;(null===(e=t.getData("text/plain"))||void 0===e?void 0:e.length)>0||(null===(l=t.getData("text/html"))||void 0===l?void 0:l.length)>0||t.files.length>0&&(i.preventDefault(),yield h([...t.files]))}),[h,u]),g=l(i=>e(void 0,void 0,void 0,function*(){if(!m||!i.target.files)return;const e=yield a([...i.target.files]),l=new Set(e.map(e=>e.name)),t=v.filter(e=>!l.has(e.name));m([...t,...e].slice(0,s))}),[v,m,s]),F=l(e=>{null==m||m(v.filter((i,l)=>l!==e))},[m,v]);return t(()=>{m&&r&&m(r)},[r]),{files:v,setFiles:m,handleSideUploadFiles:h,handleFilePaste:c,handleFileInputChange:g,handleDeleteFile:F}};export{r as useFiles};