primereact
Version:
PrimeReact is an open source UI library for React featuring a rich set of 80+ components, a theme designer, various theme alternatives such as Material, Bootstrap, Tailwind, premium templates and professional support. In addition, it integrates with Prime
2 lines (1 loc) • 11.6 kB
JavaScript
import*as e from"react";import{localeOption as t}from"primereact/api";import{Button as n}from"primereact/button";import{Messages as l}from"primereact/messages";import{ProgressBar as a}from"primereact/progressbar";import{Ripple as r}from"primereact/ripple";import{ObjectUtils as o,classNames as i,IconUtils as u,DomHandler as s}from"primereact/utils";function c(){return c=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var l in n)Object.prototype.hasOwnProperty.call(n,l)&&(e[l]=n[l])}return e},c.apply(this,arguments)}function p(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,l=new Array(t);n<t;n++)l[n]=e[n];return l}function m(e){if(Array.isArray(e))return p(e)}function f(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function d(e,t){if(e){if("string"==typeof e)return p(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?p(e,t):void 0}}function y(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function v(e){return m(e)||f(e)||d(e)||y()}function b(e){if(Array.isArray(e))return e}function h(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var l,a,r=[],o=!0,i=!1;try{for(n=n.call(e);!(o=(l=n.next()).done)&&(r.push(l.value),!t||r.length!==t);o=!0);}catch(e){i=!0,a=e}finally{try{o||null==n.return||n.return()}finally{if(i)throw a}}return r}}function g(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function E(e,t){return b(e)||h(e,t)||d(e,t)||g()}function S(e){throw new TypeError('"'+e+'" is read-only')}function N(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=w(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var l=0,a=function(){};return{s:a,n:function(){return l>=e.length?{done:!0}:{done:!1,value:e[l++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r,o=!0,i=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return o=e.done,e},e:function(e){i=!0,r=e},f:function(){try{o||null==n.return||n.return()}finally{if(i)throw r}}}}function w(e,t){if(e){if("string"==typeof e)return B(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?B(e,t):void 0}}function B(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,l=new Array(t);n<t;n++)l[n]=e[n];return l}var O=e.memo(e.forwardRef((function(p,m){var f=E(e.useState([]),2),d=f[0],y=f[1],b=E(e.useState(0),2),h=b[0],g=b[1],w=E(e.useState(!1),2),B=w[0],T=w[1],C=E(e.useState(!1),2),F=C[0],z=C[1],D=e.useRef(null),L=e.useRef(null),M=e.useRef(null),I=e.useRef(!1),U=e.useRef(0),x=o.isNotEmpty(d),A=p.disabled||F,R=p.chooseLabel||p.chooseOptions.label||t("choose"),j=p.uploadLabel||p.uploadOptions.label||t("upload"),P=p.cancelLabel||p.cancelOptions.label||t("cancel"),k=A||p.fileLimit&&p.fileLimit<=d.length+U,H=A||!x,X=A||!x,J=function(e){return/^image\//.test(e.type)},_=function(e,t){K();var n=v(d),l=d[t];n.splice(t,1),y(n),p.onRemove&&p.onRemove({originalEvent:e,file:l})},K=function(){D.current&&(D.current.value="")},V=function(e){if(0===e)return"0 B";var t=Math.floor(Math.log(e)/Math.log(1e3));return parseFloat((e/Math.pow(1e3,t)).toFixed(3))+" "+["B","KB","MB","GB","TB","PB","EB","ZB","YB"][t]},W=function(e){if(!p.onBeforeSelect||!1!==p.onBeforeSelect({originalEvent:e,files:d}))if("drop"!==e.type&&$()&&I.current)I.current=!1;else{var t=[];p.multiple&&(t=d?v(d):[]);for(var n=e.dataTransfer?e.dataTransfer.files:e.target.files,l=0;l<n.length;l++){var a=n[l];!Y(a)&&q(a)&&(J(a)&&(a.objectURL=window.URL.createObjectURL(a)),t.push(a))}y(t),o.isNotEmpty(t)&&p.auto&&G(t),p.onSelect&&p.onSelect({originalEvent:e,files:n}),"drop"!==e.type&&$()?D.current&&(I.current=!0,D.current.value=""):K(),"basic"===p.mode&&t.length>0&&(D.current.style.display="none")}},Y=function(e){return d.some((function(t){return t.name+t.type+t.size===e.name+e.type+e.size}))},$=function(){return!!window.MSInputMethodContext&&!!document.documentMode},q=function(e){if(p.maxFileSize&&e.size>p.maxFileSize){var t={severity:"error",summary:p.invalidFileSizeMessageSummary.replace("{0}",e.name),detail:p.invalidFileSizeMessageDetail.replace("{0}",V(p.maxFileSize)),sticky:!0};return"advanced"===p.mode&&L.current.show(t),p.onValidationFail&&p.onValidationFail(e),!1}return!0},G=function(e){if((e=e||d)&&e.nativeEvent&&(e=d),p.customUpload)p.fileLimit&&S("uploadedFileCount"),p.uploadHandler&&p.uploadHandler({files:e,options:{clear:Z,props:p}});else{z(!0);var t=new XMLHttpRequest,n=new FormData;p.onBeforeUpload&&p.onBeforeUpload({xhr:t,formData:n});var l,a=N(e);try{for(a.s();!(l=a.n()).done;){var r=l.value;n.append(p.name,r,r.name)}}catch(e){a.e(e)}finally{a.f()}t.upload.addEventListener("progress",(function(e){if(e.lengthComputable){var t=Math.round(100*e.loaded/e.total);g(t),p.onProgress&&p.onProgress({originalEvent:e,progress:t})}})),t.onreadystatechange=function(){4===t.readyState&&(g(0),z(!1),t.status>=200&&t.status<300?(p.fileLimit&&S("uploadedFileCount"),p.onUpload&&p.onUpload({xhr:t,files:e})):p.onError&&p.onError({xhr:t,files:e}),Z())},t.open("POST",p.url,!0),p.onBeforeSend&&p.onBeforeSend({xhr:t,formData:n}),t.withCredentials=p.withCredentials,t.send(n)}},Z=function(){y([]),z(!1),p.onClear&&p.onClear(),K()},Q=function(){D.current.click()},ee=function(){T(!0)},te=function(){T(!1)},ne=function(e){13===e.which&&Q()},le=function(e){A||(e.dataTransfer.dropEffect="copy",e.stopPropagation(),e.preventDefault())},ae=function(e){A||(e.dataTransfer.dropEffect="copy",s.addClass(M.current,"p-fileupload-highlight"),e.stopPropagation(),e.preventDefault())},re=function(e){A||(e.dataTransfer.dropEffect="copy",s.removeClass(M.current,"p-fileupload-highlight"))},oe=function(e){if(!p.disabled&&(s.removeClass(M.current,"p-fileupload-highlight"),e.stopPropagation(),e.preventDefault(),!p.onBeforeDrop||!1!==p.onBeforeDrop(e))){var t=e.dataTransfer?e.dataTransfer.files:e.target.files;(p.multiple||o.isEmpty(d)&&t&&1===t.length)&&W(e)}},ie=function(){!A&&x?G():D.current.click()};e.useImperativeHandle(m,(function(){return{props:p,upload:G,clear:Z,formatSize:V,onFileSelect:W,getInput:function(){return D.current},getContent:function(){return M.current},getFiles:function(){return d}}}));var ue,se,ce,pe,me,fe,de,ye,ve,be,he=function(t,l){var a=t.name+t.type+t.size,r=J(t)?e.createElement("div",null,e.createElement("img",{alt:t.name,role:"presentation",src:t.objectURL,width:p.previewWidth})):null,i=e.createElement("div",{className:"p-fileupload-filename"},t.name),u=e.createElement("div",null,V(t.size)),s=e.createElement("div",null,e.createElement(n,{type:"button",icon:"pi pi-times",onClick:function(e){return _(e,l)},disabled:A})),c=e.createElement(e.Fragment,null,r,i,u,s);if(p.itemTemplate){var m={onRemove:function(e){return _(e,l)},previewElement:r,fileNameElement:i,sizeElement:u,removeElement:s,formatSize:V(t.size),element:c,props:p};c=o.getJSXElement(p.itemTemplate,t,m)}return e.createElement("div",{className:"p-fileupload-row",key:a},c)};return"advanced"===p.mode?function(){var t,s,m,f,y,v,b,g,E,S,N,w,T,C,F=o.findDiffKeys(p,O.defaultProps),z=i("p-fileupload p-fileupload-advanced p-component",p.className),I=i("p-fileupload-buttonbar",p.headerClassName),U=i("p-fileupload-content",p.contentClassName),J=(s=(t=p.chooseOptions).style,m=t.icon,y=i("p-button p-fileupload-choose p-component",{"p-disabled":A,"p-focus":B,"p-button-icon-only":f=t.iconOnly},t.className),v="p-button-label p-clickable",b=f?e.createElement("span",{className:v,dangerouslySetInnerHTML:{__html:" "}}):e.createElement("span",{className:v},R),g=e.createElement("input",{ref:D,type:"file",onChange:W,multiple:p.multiple,accept:p.accept,disabled:k}),E=u.getJSXIcon(m||"pi pi-fw pi-plus",{className:"p-button-icon p-button-icon-left p-clickable"},{props:p}),e.createElement("span",{className:y,style:s,onClick:Q,onKeyDown:ne,onFocus:ee,onBlur:te,tabIndex:0},g,E,b,e.createElement(r,null))),_=p.emptyTemplate&&!x?o.getJSXElement(p.emptyTemplate,p):null;if(!p.auto){var K=p.uploadOptions,V=p.cancelOptions,Y=V.iconOnly?"":P;S=e.createElement(n,{type:"button",label:K.iconOnly?"":j,icon:K.icon||"pi pi-upload",onClick:G,disabled:H,style:K.style,className:K.className}),N=e.createElement(n,{type:"button",label:Y,icon:V.icon||"pi pi-times",onClick:Z,disabled:X,style:V.style,className:V.className})}x&&(C=d.map(he),w=e.createElement("div",{className:"p-fileupload-files"},C),T=p.progressBarTemplate?o.getJSXElement(p.progressBarTemplate,p):e.createElement(a,{value:h,showValue:!1}));var $=e.createElement("div",{className:I,style:p.headerStyle},J,S,N);p.headerTemplate&&($=o.getJSXElement(p.headerTemplate,{className:I,chooseButton:J,uploadButton:S,cancelButton:N,element:$,props:p}));return e.createElement("div",c({id:p.id,className:z,style:p.style},F),$,e.createElement("div",{ref:M,className:U,style:p.contentStyle,onDragEnter:le,onDragOver:ae,onDragLeave:re,onDrop:oe},T,e.createElement(l,{ref:L}),w,_))}():"basic"===p.mode?(ue=p.chooseOptions,se=o.findDiffKeys(p,O.defaultProps),ce=i("p-fileupload p-fileupload-basic p-component",p.className),pe=i("p-button p-component p-fileupload-choose",{"p-fileupload-choose-selected":x,"p-disabled":A,"p-focus":B},ue.className),me=ue.icon||i({"pi pi-plus":!ue.icon&&(!x||p.auto),"pi pi-upload":!ue.icon&&x&&!p.auto}),fe="p-button-label p-clickable",de=ue.iconOnly?e.createElement("span",{className:fe,dangerouslySetInnerHTML:{__html:" "}}):e.createElement("span",{className:fe},R),ye=p.auto?de:e.createElement("span",{className:fe},x?d[0].name:de),ve=u.getJSXIcon(me,{className:"p-button-icon p-button-icon-left"},{props:p,hasFiles:x}),be=!x&&e.createElement("input",{ref:D,type:"file",accept:p.accept,multiple:p.multiple,disabled:A,onChange:W}),e.createElement("div",c({className:ce,style:p.style},se),e.createElement(l,{ref:L}),e.createElement("span",{className:pe,style:ue.style,onMouseUp:ie,onKeyDown:ne,onFocus:ee,onBlur:te,tabIndex:0},ve,ye,be,e.createElement(r,null)))):void 0})));O.displayName="FileUpload",O.defaultProps={__TYPE:"FileUpload",id:null,name:null,url:null,mode:"advanced",multiple:!1,accept:null,disabled:!1,auto:!1,maxFileSize:null,invalidFileSizeMessageSummary:"{0}: Invalid file size, ",invalidFileSizeMessageDetail:"maximum upload size is {0}.",style:null,className:null,widthCredentials:!1,previewWidth:50,chooseLabel:null,uploadLabel:null,cancelLabel:null,chooseOptions:{label:null,icon:null,iconOnly:!1,className:null,style:null},uploadOptions:{label:null,icon:null,iconOnly:!1,className:null,style:null},cancelOptions:{label:null,icon:null,iconOnly:!1,className:null,style:null},customUpload:!1,headerClassName:null,headerStyle:null,contentClassName:null,contentStyle:null,headerTemplate:null,itemTemplate:null,emptyTemplate:null,progressBarTemplate:null,onBeforeUpload:null,onBeforeSend:null,onBeforeDrop:null,onBeforeSelect:null,onUpload:null,onError:null,onClear:null,onSelect:null,onProgress:null,onValidationFail:null,uploadHandler:null,onRemove:null};export{O as FileUpload};