/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.24/esri/copyright.txt for details. */ import{_ as t}from"../chunks/tslib.es6.js";import e from"../core/Error.js";import{on as s,watch as i,initial as a}from"../core/reactiveUtils.js";import{formatFileSize as n}from"../core/unitFormatUtils.js";import{aliasOf as r}from"../core/accessorSupport/decorators/aliasOf.js";import"../core/arrayUtils.js";import"../core/has.js";import{cast as o}from"../core/accessorSupport/decorators/cast.js";import{property as l}from"../core/accessorSupport/decorators/property.js";import{subclass as m}from"../core/accessorSupport/decorators/subclass.js";import d from"./Widget.js";import c from"./Attachments/AttachmentsViewModel.js";import{isSupportedImage as h,getIconPath as u}from"./Attachments/support/attachmentUtils.js";import{storeNode as p,discardNode as b,isRTL as _}from"./support/widgetUtils.js";import{messageBundle as g}from"./support/decorators/messageBundle.js";import{tsx as f}from"./support/jsxFactory.js";const v={addButton:!0,addSubmitButton:!0,cancelAddButton:!0,cancelUpdateButton:!0,deleteButton:!0,errorMessage:!0,progressBar:!0,updateButton:!0},y={base:"esri-attachments",loaderContainer:"esri-attachments__loader-container",loader:"esri-attachments__loader",fadeIn:"esri-attachments--fade-in",container:"esri-attachments__container",containerList:"esri-attachments__container--list",containerPreview:"esri-attachments__container--preview",actions:"esri-attachments__actions",deleteButton:"esri-attachments__delete-button",addAttachmentButton:"esri-attachments__add-attachment-button",errorMessage:"esri-attachments__error-message",items:"esri-attachments__items",item:"esri-attachments__item",itemButton:"esri-attachments__item-button",itemMask:"esri-attachments__item-mask",itemMaskIcon:"esri-attachments__item-mask--icon",itemImage:"esri-attachments__image",itemImageResizable:"esri-attachments__image--resizable",itemLabel:"esri-attachments__label",itemFilename:"esri-attachments__filename",itemChevronIcon:"esri-attachments__item-chevron-icon",itemLink:"esri-attachments__item-link",itemLinkOverlay:"esri-attachments__item-link-overlay",itemLinkOverlayIcon:"esri-attachments__item-link-overlay-icon",itemEditIcon:"esri-attachments__item-edit-icon",itemAddIcon:"esri-attachments__item-add-icon",itemAddButton:"esri-attachments__item-add-button",formNode:"esri-attachments__form-node",fileFieldset:"esri-attachments__file-fieldset",fileLabel:"esri-attachments__file-label",fileName:"esri-attachments__file-name",fileInput:"esri-attachments__file-input",metadata:"esri-attachments__metadata",metadataFieldset:"esri-attachments__metadata-fieldset",progressBar:"esri-attachments__progress-bar",esriWidget:"esri-widget",esriButton:"esri-button",buttonDisabled:"esri-button--disabled",esriButtonSecondary:"esri-button--secondary",esriButtonTertiary:"esri-button--tertiary",esriButtonThird:"esri-button--third",esriButtonSmall:"esri-button--small",esriButtonHalf:"esri-button--half",empty:"esri-widget__content--empty",iconExternalLink:"esri-icon-link-external",iconEdit:"esri-icon-edit",iconRight:"esri-icon-right",iconLeft:"esri-icon-left",iconPlus:"esri-icon-plus"},B=window.CSS;let A=class extends d{constructor(t,e){super(t,e),this.abilities=null,this.displayType="auto",this.graphic=null,this.label=void 0,this.messages=null,this.messagesUnits=null,this.selectedFile=null,this.submitting=!1,this.viewModel=new c,this.visibleElements={...v},this._supportsImageOrientation=B&&B.supports&&B.supports("image-orientation","from-image"),this._addAttachmentForm=null,this._updateAttachmentForm=null}initialize(){this.own([s((()=>this.viewModel?.attachmentInfos),"change",(()=>this.scheduleRender())),i((()=>this.viewModel?.mode),(()=>this._modeChanged()),a)])}get effectiveDisplayType(){const{displayType:t}=this;return t&&"auto"!==t?t:this.viewModel.supportsResizeAttachments?"preview":"list"}castVisibleElements(t){return{...v,...t}}addAttachment(){const{_addAttachmentForm:t,viewModel:s}=this;return this._set("submitting",!0),this._set("error",null),s.addAttachment(t).then((t=>(this._set("submitting",!1),this._set("error",null),s.mode="view",t))).catch((t=>{throw this._set("submitting",!1),this._set("error",new e("attachments:add-attachment",this.messages.addErrorMessage,t)),t}))}deleteAttachment(t){const{viewModel:s}=this;return this._set("submitting",!0),this._set("error",null),s.deleteAttachment(t).then((t=>(this._set("submitting",!1),this._set("error",null),s.mode="view",t))).catch((t=>{throw this._set("submitting",!1),this._set("error",new e("attachments:delete-attachment",this.messages.deleteErrorMessage,t)),t}))}updateAttachment(){const{viewModel:t}=this,{_updateAttachmentForm:s}=this;return this._set("submitting",!0),this._set("error",null),t.updateAttachment(s).then((e=>(this._set("submitting",!1),this._set("error",null),t.mode="view",e))).catch((t=>{throw this._set("submitting",!1),this._set("error",new e("attachments:update-attachment",this.messages.updateErrorMessage,t)),t}))}render(){const{submitting:t,viewModel:e}=this,{state:s}=e;return f("div",{class:this.classes(y.base,y.esriWidget)},t?this.renderProgressBar():null,"loading"===s?this.renderLoading():this.renderAttachments(),this.renderErrorMessage())}renderErrorMessage(){const{error:t,visibleElements:e}=this;return t&&e.errorMessage?f("div",{key:"error-message",class:y.errorMessage},t.message):null}renderAttachments(){const{mode:t,activeAttachmentInfo:e}=this.viewModel;return"add"===t?this.renderAddForm():"edit"===t?this.renderDetailsForm(e):this.renderAttachmentContainer()}renderLoading(){return f("div",{class:y.loaderContainer,key:"loader"},f("div",{class:y.loader}))}renderProgressBar(){return this.visibleElements.progressBar?f("div",{class:y.progressBar,key:"progress-bar"}):null}renderAddForm(){const{submitting:t,selectedFile:e}=this,s=t||!e,i=this.visibleElements.cancelAddButton?f("button",{type:"button",bind:this,disabled:t,onclick:this._cancelForm,class:this.classes(y.esriButton,y.esriButtonTertiary,y.esriButtonSmall,y.esriButtonHalf,t&&y.buttonDisabled)},this.messages.cancel):null,a=this.visibleElements.addSubmitButton?f("button",{type:"submit",disabled:s,class:this.classes(y.esriButton,y.esriButtonSecondary,y.esriButtonSmall,y.esriButtonHalf,{[y.buttonDisabled]:s})},this.messages.add):null,n=e?f("span",{key:"file-name",class:y.fileName},e.name):null,r=f("form",{bind:this,afterCreate:p,afterRemoved:b,"data-node-ref":"_addAttachmentForm",onsubmit:this._submitAddAttachment},f("fieldset",{class:y.fileFieldset},n,f("label",{class:this.classes(y.fileLabel,y.esriButton,y.esriButtonSecondary)},e?this.messages.changeFile:this.messages.selectFile,f("input",{class:y.fileInput,type:"file",name:"attachment",bind:this,onchange:this._handleFileInputChange}))),a,i);return f("div",{key:"add-form-container",class:y.formNode},r)}renderDetailsForm(t){const{visibleElements:e,viewModel:s,selectedFile:i,submitting:a}=this,{contentType:r,size:o,url:l}=t,{abilities:m}=s,d=a||!i,c=m.editing&&m.operations.delete&&e.deleteButton?f("button",{key:"delete-button",type:"button",disabled:a,bind:this,onclick:e=>this._submitDeleteAttachment(e,t),class:this.classes(y.esriButton,y.esriButtonSmall,y.esriButtonTertiary,y.deleteButton,{[y.buttonDisabled]:a})},this.messages.delete):null,h=m.editing&&m.operations.update&&e.updateButton?f("button",{disabled:d,key:"update-button",type:"submit",class:this.classes(y.esriButton,y.esriButtonSmall,y.esriButtonThird,{[y.buttonDisabled]:d})},this.messages.update):null,u=this.visibleElements.cancelUpdateButton?f("button",{disabled:a,key:"cancel-button",type:"button",bind:this,onclick:this._cancelForm,class:this.classes(y.esriButton,y.esriButtonSmall,y.esriButtonTertiary,y.esriButtonThird,{[y.buttonDisabled]:a})},this.messages.cancel):null,_=i?f("span",{key:"file-name",class:y.fileName},i.name):null,g=m.editing&&m.operations.update?f("fieldset",{key:"file",class:y.fileFieldset},_,f("label",{class:this.classes(y.fileLabel,y.esriButton,y.esriButtonSecondary)},this.messages.changeFile,f("input",{class:y.fileInput,type:"file",name:"attachment",bind:this,onchange:this._handleFileInputChange}))):null,v=f("fieldset",{key:"size",class:y.metadataFieldset},f("label",null,n(this.messagesUnits,o))),B=f("fieldset",{key:"content-type",class:y.metadataFieldset},f("label",null,r)),A=f("form",{bind:this,afterCreate:p,afterRemoved:b,"data-node-ref":"_updateAttachmentForm",onsubmit:this._submitUpdateAttachment},f("div",{class:y.metadata},v,B),g,f("div",{class:y.actions},c,u,h));return f("div",{key:"edit-form-container",class:y.formNode},f("a",{class:y.itemLink,href:l,rel:"noreferrer",target:"_blank"},this.renderImageMask({attachmentInfo:t,size:400}),f("div",{class:y.itemLinkOverlay},f("span",{class:y.itemLinkOverlayIcon},f("svg",{xmlns:"http://www.w3.org/2000/svg",width:"32",height:"32",viewBox:"0 0 32 32"},f("path",{d:"M28 13h1v16H3V3h16v1H4v24h24zm-5-9h4.293L15.646 15.638l.707.707L28 4.707V9h1V3h-6z"}),f("path",{fill:"none",d:"M0 0h32v32H0z"}))))),A)}renderImageMask({attachmentInfo:t,size:e}){const{supportsResizeAttachments:s}=this.viewModel,{contentType:i,name:a,url:n}=t,r=s&&h(i),o=this._getCSSTransform(t,r),l=o?{transform:o,"image-orientation":"none"}:{},m=n.includes("?")?"&":"?",d=r?`${n}${m}w=${e}`:u(i),c={[y.itemMaskIcon]:!r},p={[y.itemImageResizable]:s};return f("div",{class:this.classes(c,y.itemMask)},f("img",{styles:l,alt:a,src:d,class:this.classes(p,y.itemImage)}))}renderAttachmentInfo({attachmentInfo:t,displayType:e}){const{viewModel:s}=this,{abilities:i}=s,{name:a,url:n}=t,r=this.renderImageMask({attachmentInfo:t,size:"list"===e?48:400}),o=i.editing?f("span",{"aria-hidden":"true",class:this.classes(y.itemChevronIcon,_(this.container)?y.iconLeft:y.iconRight)}):null,l=[r,f("label",{class:y.itemLabel},f("span",{class:y.itemFilename},a||this.messages.noTitle),o)],m=i.editing?f("button",{key:"details-button",bind:this,class:y.itemButton,title:this.messages.attachmentDetails,"aria-label":this.messages.attachmentDetails,"data-attachment-info-id":t.id,onclick:()=>this._startEditAttachment(t),type:"button"},l):f("a",{key:"details-link",class:y.itemButton,href:n,target:"_blank"},l);return f("li",{class:y.item,key:t},m)}renderAttachmentContainer(){const{effectiveDisplayType:t,viewModel:e,visibleElements:s}=this,{attachmentInfos:i,abilities:a}=e,n=i&&i.length,r={[y.containerList]:"preview"!==t,[y.containerPreview]:"preview"===t},o=a.editing&&a.operations.add&&s.addButton?f("button",{bind:this,onclick:()=>this._startAddAttachment(),class:this.classes(y.esriButton,y.esriButtonTertiary,y.addAttachmentButton),type:"button"},f("span",{"aria-hidden":"true",class:this.classes(y.itemAddIcon,y.iconPlus)}),this.messages.add):null,l=n?f("ul",{class:y.items},i.toArray().map((e=>this.renderAttachmentInfo({attachmentInfo:e,displayType:t})))):f("div",{class:y.empty},this.messages.noAttachments);return f("div",{key:"attachments-container",class:this.classes(y.container,r)},l,o)}_modeChanged(){this._set("error",null),this._set("selectedFile",null)}_handleFileInputChange(t){const e=t.target,s=e&&e.files&&e.files.item(0);this._set("selectedFile",s)}_submitDeleteAttachment(t,e){t.preventDefault(),this.deleteAttachment(e)}_submitAddAttachment(t){t.preventDefault(),this.addAttachment()}_submitUpdateAttachment(t){t.preventDefault(),this.updateAttachment()}_startEditAttachment(t){const{viewModel:e}=this;e.activeAttachmentInfo=t,e.mode="edit"}_startAddAttachment(){this.viewModel.mode="add"}_cancelForm(t){t.preventDefault(),this.viewModel.mode="view"}_getCSSTransform(t,e){const{orientationInfo:s}=t;return!this._supportsImageOrientation&&e&&s?[s.rotation?`rotate(${s.rotation}deg)`:"",s.mirrored?"scaleX(-1)":""].join(" "):""}};t([r("viewModel.abilities")],A.prototype,"abilities",void 0),t([l()],A.prototype,"displayType",void 0),t([l({readOnly:!0})],A.prototype,"effectiveDisplayType",null),t([r("viewModel.graphic")],A.prototype,"graphic",void 0),t([l({aliasOf:{source:"messages.widgetLabel",overridable:!0}})],A.prototype,"label",void 0),t([l(),g("esri/widgets/Attachments/t9n/Attachments")],A.prototype,"messages",void 0),t([l(),g("esri/core/t9n/Units")],A.prototype,"messagesUnits",void 0),t([l({readOnly:!0})],A.prototype,"selectedFile",void 0),t([l({readOnly:!0})],A.prototype,"submitting",void 0),t([l({readOnly:!0})],A.prototype,"error",void 0),t([l({type:c})],A.prototype,"viewModel",void 0),t([l()],A.prototype,"visibleElements",void 0),t([o("visibleElements")],A.prototype,"castVisibleElements",null),A=t([m("esri.widgets.Attachments")],A);const w=A;export{w as default};