@chief-editor/ui
Version:
UI Component for chief editor
1 lines • 4.94 kB
JavaScript
var __extends=this&&this.__extends||function(){var e=function(t,i){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var i in t)t.hasOwnProperty(i)&&(e[i]=t[i])})(t,i)};return function(t,i){function s(){this.constructor=t}e(t,i),t.prototype=null===i?Object.create(i):(s.prototype=i.prototype,new s)}}();import{Emitter}from"@co-hooks/emitter";import{FileClass}from"./file";import{FileStatus}from"..";var FileUpload=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.files=[],t.filesMap={},t.input={current:null},t.maxLength=-1,t.autoUpload=!0,t.name="",t.uploadUrl="",t.accept="",t.multiple=!1,t.withCredentials=!1,t.headers={},t.errors={overflowCount:""},t}return __extends(t,e),t.prototype.init=function(e){this.input=e},t.prototype.initFile=function(e){var t=new FileClass({id:e.id,file:e.file,fileType:e.fileType,name:e.name,fileStatus:this.autoUpload?e.fileStatus:FileStatus.DONE});return this.filesMap[t.id]=t,t},t.prototype.initURLFile=function(e){var t=new FileClass({id:e.id,fileStatus:FileStatus.DONE,fileType:e.fileType,url:e.url,name:e.name?e.name:e.url});return this.filesMap[t.id]=t,t},t.prototype.clickInput=function(){this.input.current&&this.input.current.click()},t.prototype.addFiles=function(e){if(this.files.length+e.length>this.maxLength&&this.maxLength>-1)this.emit("error",{type:"overflowCount",message:this.errors.overflowCount});else for(var t=0,i=[].slice.call(e);t<i.length;t++){var s=i[t],n=this.initFile({file:s});this.emit("change",{type:"init",file:n.getBaseFile()})}},t.prototype.replaceFile=function(e){var t=this,i=document.createElement("input");i.type="file",i.accept=this.accept,i.onchange=function(i){var s=i.target.files;if(s){var n=t.filesMap[e];n.destroy(),n.updateFile({file:s[0],url:"",name:n.name,fileStatus:FileStatus.INIT}),t.emit("change",{type:"init",file:n.getBaseFile()})}},i.click()},t.prototype.removeFileById=function(e){var t=this.getIndexById(e);t>-1&&this.emit("change",{type:"remove",index:t,file:this.filesMap[e].getBaseFile()})},t.prototype.getIndexById=function(e){for(var t=0;t<this.files.length;t++)if(this.files[t].id===e)return t;return-1},t.prototype.upload=function(e){var t=this;e.fileStatus=FileStatus.LOADING,this.emit("file-change",e.id);var i=new XMLHttpRequest,s=new FormData;for(var n in i.responseType="json",i.upload&&(i.upload.onprogress=function(i){var s,n;i.total>0&&(s=i.loaded,n=i.total,e.setProgress(parseFloat((s/n*100).toFixed(2))),t.emit("file-change",e.id))}),i.onerror=function(s){var n=t.getIndexById(e.id);n>-1&&t.emit("change",{type:"uploaded",index:n,response:i.response,file:e.getBaseFile()})},i.onload=function(s){var n=t.getIndexById(e.id);n>-1&&t.emit("change",{type:"uploaded",index:n,response:i.response,file:e.getBaseFile()})},s.append(this.name,e.file),i.open("post",this.uploadUrl,!0),this.headers)Object.prototype.hasOwnProperty.call(this.headers,n)&&i.setRequestHeader(n,this.headers[n]);return i.withCredentials=this.withCredentials,i.send(s),e.request={abort:function(){i.abort()}},e},t.prototype.uploadFileById=function(e){var t=this.getIndexById(e);t>-1&&this.upload(this.files[t])},t.prototype.isOverMaxLength=function(){return this.maxLength>=0&&this.files.length>=this.maxLength},t.prototype.updateOptions=function(e){this.errors=e.errors||{overflowCount:""},this.maxLength=e.maxLength||0===e.maxLength?e.maxLength:-1,this.autoUpload=!!e.autoUpload,this.name=e.name||"",this.uploadUrl=e.uploadUrl||"",this.accept=e.accept||"",this.headers=e.headers||{},this.withCredentials=e.withCredentials||!1},t.prototype.updateValue=function(e){var t=this,i=!1,s=!0,n=[];e.length!==this.files.length&&(i=!0),this.maxLength>-1&&e.length>this.maxLength?this.emit("error",{type:"overflowCount",message:this.errors.overflowCount}):(e.forEach((function(e){var o=t.filesMap[e.id];if(o)t.autoUpload&&e.fileStatus===FileStatus.INIT?(n.push(t.upload(o)),s=!1):o.fileStatus===e.fileStatus?(n.push(o),o.fileStatus!==FileStatus.DONE&&o.fileStatus!==FileStatus.FAIL&&(s=!1)):e.fileStatus!==o.fileStatus&&(n.push(o.updateFile(e)),i=!0,e.fileStatus!==FileStatus.DONE&&e.fileStatus!==FileStatus.FAIL&&(s=!1));else if(e.url)n.push(t.initURLFile(e)),i=!0;else{if(!e.file)throw new Error("初始化时请设置url 或者 file对象");n.push(t.initFile(e)),i=!0,t.autoUpload&&(s=!1)}})),this.files=n,i&&this.emit("files-change",this.files),i&&s&&this.emit("value-change",this.getBaseFiles()),this.clearUnusedFiles(),this.emit("disable-change",this.isOverMaxLength()))},t.prototype.destroy=function(){this.files.forEach((function(e){e.destroy()}))},t.prototype.clearUnusedFiles=function(){var e=Object.assign({},this.filesMap);this.files.forEach((function(t){delete e[t.id]})),Object.keys(e).forEach((function(t){e[t].destroy(),delete e[t]}))},t.prototype.getBaseFiles=function(){return this.files.map((function(e){return e.getBaseFile()}))},t}(Emitter);export{FileUpload};