(window.imageEmbeddable_bundle_jsonpfunction=window.imageEmbeddable_bundle_jsonpfunction||[]).push([[5],{51:function(e,t,i){"use strict";i.r(t),i.d(t,"FileUpload",(function(){return C}));var a=i(0),s=i.n(a),l=i(31),o=i(17),n=i(24),r=i(27),d=i(1),c=i(5),u=i.n(c),p=i(2);const b={defaultPickerLabel:p.i18n.translate("sharedUXPackages.fileUpload.defaultFilePickerLabel",{defaultMessage:"Upload a file"}),upload:p.i18n.translate("sharedUXPackages.fileUpload.uploadButtonLabel",{defaultMessage:"Upload"}),uploading:p.i18n.translate("sharedUXPackages.fileUpload.uploadingButtonLabel",{defaultMessage:"Uploading"}),uploadComplete:p.i18n.translate("sharedUXPackages.fileUpload.uploadCompleteButtonLabel",{defaultMessage:"Upload complete"}),retry:p.i18n.translate("sharedUXPackages.fileUpload.retryButtonLabel",{defaultMessage:"Retry"}),clear:p.i18n.translate("sharedUXPackages.fileUpload.clearButtonLabel",{defaultMessage:"Clear"}),cancel:p.i18n.translate("sharedUXPackages.fileUpload.cancelButtonLabel",{defaultMessage:"Cancel"}),uploadDone:p.i18n.translate("sharedUXPackages.fileUpload.uploadDoneToolTipContent",{defaultMessage:"Your file was successfully uploaded!"}),fileTooLarge:e=>p.i18n.translate("sharedUXPackages.fileUpload.fileTooLargeErrorMessage",{defaultMessage:"File is too large. Maximum size is {expectedSize, plural, one {# byte} other {# bytes} }.",values:{expectedSize:e}}),mimeTypeNotSupported:(e,t)=>p.i18n.translate("sharedUXPackages.fileUpload.mimeTypeNotSupportedErrorMessage",{defaultMessage:'File mime type "{mimeType}" is not supported. Supported mime types are: {supportedMimeTypes}.',values:{mimeType:e,supportedMimeTypes:t}})},m=s.a.createContext(null),h=()=>s.a.useContext(m),f=({onClick:e})=>{const t=h(),i=Object(r.d)(t.uploading$),a=Object(r.d)(t.error$),s=u()(t.done$),l=u()(t.files$,[]);return Object(d.jsx)(o.EuiButton,{key:"uploadButton",isLoading:i,color:s?"success":"primary",iconType:s?"checkInCircleFilled":void 0,disabled:Boolean(!l.length||a||s),onClick:e,size:"s","data-test-subj":"uploadButton"},s?b.uploadComplete:i?b.uploading:b.upload)},g=({onClick:e})=>{const t=h(),i=Object(r.d)(t.uploading$);return Object(d.jsx)(o.EuiButton,{key:"retryButton",size:"s","data-test-subj":"retryButton",disabled:i,onClick:e},b.retry)},j=({onClick:e,compressed:t})=>{const i=h(),a=!Object(r.d)(i.uploading$);return t?Object(d.jsx)(o.EuiButtonIcon,{color:"danger","data-test-subj":"cancelButtonIcon",disabled:a,iconType:"cross","aria-label":b.cancel,onClick:e}):Object(d.jsx)(o.EuiButton,{key:"cancelButton",size:"s","data-test-subj":"cancelButton",disabled:a,onClick:e,color:"danger"},b.cancel)},x=({onCancel:e,onUpload:t,immediate:i,compressed:a})=>{const s=h(),l=Object(r.d)(s.uploading$),o=u()(s.files$,[]),n=Boolean(o.some((e=>"upload_failed"===e.status)));return a||l?Object(d.jsx)(j,{compressed:a,onClick:e}):n?Object(d.jsx)(g,{onClick:t}):i?null:Object(d.jsx)(f,{onClick:t})},y=({onClick:e})=>Object(d.jsx)(o.EuiButtonEmpty,{size:"s","data-test-subj":"clearButton",onClick:e,color:"primary"},b.clear),{euiFormMaxWidth:w,euiButtonHeightSmall:v}=n.euiThemeVars,O={horizontalContainer:{name:"ho1qnd",styles:"display:flex;flex-direction:row"},fullWidth:{name:"1d3w5wq",styles:"width:100%"}},U=s.a.forwardRef((({compressed:e,meta:t,accept:i,immediate:a,allowClear:l=!1,multiple:n,initialFilePromptText:c,fullWidth:p,className:m},f)=>{const{euiTheme:g}=Object(o.useEuiTheme)(),j=h(),U=Object(r.d)(j.uploading$),$=Object(r.d)(j.error$),S=u()(j.done$),k=Boolean($),B=null==$?void 0:$.message,C=Object(o.useGeneratedHtmlId)({prefix:"filesFileUpload"}),E=`${C}_error`;return Object(d.jsx)("div",{"data-test-subj":"filesFileUpload",css:[Object(d.css)("max-width:",p?"100%":w,";",""),p?O.fullWidth:void 0,e?O.horizontalContainer:void 0,"",""],className:m},Object(d.jsx)(o.EuiFilePicker,{fullWidth:p,"aria-label":b.defaultPickerLabel,id:C,ref:f,onChange:e=>{j.setFiles(Array.from(null!=e?e:[])),a&&j.hasFiles()&&j.upload(t)},multiple:n,initialPromptText:c,isLoading:U,isInvalid:k,accept:i,disabled:Boolean((null==S?void 0:S.length)||U),"aria-describedby":B?E:void 0,display:e?"default":"large"}),Object(d.jsx)(o.EuiSpacer,{size:"s",css:e?Object(d.css)("width:",g.size.s,";",""):void 0}),Object(d.jsx)(o.EuiFlexGroup,{justifyContent:"flexStart",alignItems:e?"center":"flexStart",direction:e?void 0:"rowReverse",gutterSize:e?"none":"m",responsive:!1},Object(d.jsx)(o.EuiFlexItem,{grow:!1},Object(d.jsx)(x,{compressed:e,immediate:a,onCancel:j.abort,onUpload:()=>j.upload(t)})),!e&&Boolean(!S&&!U&&B)&&Object(d.jsx)(o.EuiFlexItem,null,Object(d.jsx)(o.EuiText,{"data-test-subj":"error",css:Object(d.css)("display:flex;align-items:center;min-height:",v,";",""),size:"s",color:"danger"},Object(d.jsx)("span",{id:E},B))),!e&&(null==S?void 0:S.length)&&l&&Object(d.jsx)(s.a.Fragment,null,Object(d.jsx)(o.EuiFlexItem,null)," ",Object(d.jsx)(o.EuiFlexItem,{grow:!1},Object(d.jsx)(y,{onClick:j.clear})))))}));var $=i(3),S=i.n($),k=i(18),B=i(25);class simple_state_subject_SimpleStateSubject extends k.BehaviorSubject{constructor(e){super(e)}getSnapshot(){return this.getValue()}setState(e){this.next(Object(B.merge)({},this.getSnapshot(),e))}}class upload_state_UploadState{constructor(e,t,i={allowRepeatedUploads:!1},a=r.b){S()(this,"abort$",new k.Subject),S()(this,"files$$",new k.BehaviorSubject([])),S()(this,"files$",this.files$$.pipe(k.switchMap((e=>e.length?k.zip(...e):k.of([]))))),S()(this,"clear$",new k.Subject),S()(this,"error$",new k.BehaviorSubject(void 0)),S()(this,"uploading$",new k.BehaviorSubject(!1)),S()(this,"done$",new k.Subject),S()(this,"subscriptions",void 0),S()(this,"validateFile",(e=>{const t=this.fileKind;if(null!=t.maxSizeBytes&&e.size>this.fileKind.maxSizeBytes){const e=b.fileTooLarge(String(this.fileKind.maxSizeBytes));throw new Error(e)}if(null!=t.allowedMimeTypes&&!t.allowedMimeTypes.includes(e.type)){const i=b.mimeTypeNotSupported(e.type,t.allowedMimeTypes.join(", "));throw new Error(i)}})),S()(this,"setFiles",(e=>{if(this.isUploading())throw new Error("Cannot update files while uploading");let t;e.length||(this.done$.next(void 0),this.error$.next(void 0));try{e.forEach(this.validateFile)}catch(e){t=e}this.files$$.next(e.map((e=>new simple_state_subject_SimpleStateSubject({file:e,status:"idle",error:t}))))})),S()(this,"abort",(()=>{if(!this.isUploading())throw new Error("No upload in progress");this.abort$.next()})),S()(this,"clear",(()=>{this.setFiles([]),this.clear$.next()})),S()(this,"uploadFile",((e,t,i)=>{const a=new AbortController,s=a.signal,{file:l,status:o}=e.getValue();if(!["idle","upload_failed"].includes(o))return k.of(void 0);let n;e.setState({status:"uploading",error:void 0});const{name:d}={name:((c=l.name).substring(0,c.lastIndexOf("."))||c).trim().slice(0,256).replace(/[^a-z0-9\s]/gi,"_")};var c;const u=l.type||void 0,p=i;return k.from(Object(r.c)(l)?this.loadImageMetadata(l):k.of(void 0)).pipe(k.mergeMap((e=>this.client.create({kind:this.fileKind.id,name:d,mimeType:u,meta:e?{...e,...p}:p}))),k.mergeMap((e=>(n=e.file,k.race(t.pipe(k.map((()=>{throw a.abort(),new Error("Abort!")}))),this.client.upload({body:l,id:n.id,kind:this.fileKind.id,abortSignal:s,selfDestructOnAbort:!0,contentType:u}))))),k.map((()=>{var t;e.setState({status:"uploaded",id:null===(t=n)||void 0===t?void 0:t.id,fileJSON:n})})),k.catchError((t=>{const i="Abort!"===t.message;return e.setState({status:"upload_failed",error:i?void 0:t}),k.of(i?void 0:t)})))})),S()(this,"upload",(e=>{if(this.isUploading())throw new Error("Upload already in progress");const t=new k.ReplaySubject(1),i=this.abort$.subscribe(t),a=this.files$$.pipe(k.take(1),k.switchMap((i=>k.forkJoin(i.map((i=>this.uploadFile(i,t,e)))))),k.map((()=>{})),k.finalize((()=>{this.opts.allowRepeatedUploads&&this.clear(),i.unsubscribe()})),k.shareReplay());return a.subscribe(),a})),S()(this,"dispose",(()=>{for(const e of this.subscriptions)e.unsubscribe()})),this.fileKind=e,this.client=t,this.opts=i,this.loadImageMetadata=a;const s=this.files$$.pipe(k.switchMap((e=>k.combineLatest(e))));this.subscriptions=[s.pipe(k.map((e=>e.some((e=>"uploading"===e.status)))),k.distinctUntilChanged()).subscribe(this.uploading$),s.pipe(k.map((e=>{const t=e.find((e=>Boolean(e.error)));return t?t.error:void 0})),k.filter(Boolean)).subscribe(this.error$),s.pipe(k.filter((e=>Boolean(e.length)&&e.every((e=>"uploaded"===e.status)))),k.map((e=>e.map((e=>({id:e.id,kind:this.fileKind.id,fileJSON:e.fileJSON})))))).subscribe(this.done$)]}isUploading(){return this.uploading$.getValue()}hasFiles(){return this.files$$.getValue().length>0}}const C=({meta:e,onDone:t,onError:i,fullWidth:s,allowClear:o,onUploadEnd:n,onUploadStart:r,compressed:c=!1,kind:u,multiple:p=!1,initialPromptText:b,immediate:h=!1,allowRepeatedUploads:f=!1,className:g})=>{var j;const{client:x}=Object(l.b)(),y=Object(a.useRef)(null),w=x.getFileKind(u),v=c||f,O=Object(a.useMemo)((()=>(({fileKind:e,client:t,imageMetadataFactory:i,...a})=>new upload_state_UploadState(e,t,a,i))({client:x,fileKind:w,allowRepeatedUploads:v})),[x,v,w]);return Object(a.useEffect)((()=>{const e=[O.clear$.subscribe((()=>{var e;null===(e=y.current)||void 0===e||e.removeFiles()})),O.done$.subscribe((e=>e&&t(e))),O.error$.subscribe((e=>e&&(null==i?void 0:i(e)))),O.uploading$.subscribe((e=>e?null==r?void 0:r():null==n?void 0:n()))];return()=>e.forEach((e=>e.unsubscribe()))}),[O,t,i,r,n]),Object(a.useEffect)((()=>O.dispose),[O]),Object(d.jsx)(m.Provider,{value:O},Object(d.jsx)(U,{compressed:c,ref:y,accept:null===(j=w.allowedMimeTypes)||void 0===j?void 0:j.join(","),meta:e,immediate:c||h,allowClear:o,fullWidth:s,initialFilePromptText:b,multiple:p,className:g}))};t.default=C}}]);