1import{P as l,i as d}from"./polyfazer-app-DumDTOPg.js";import{h as p}from"./polymer-utils-B8xivS0d.js";import{D as m}from"./diamond-section-behavior-oUm0C5jt.js";import{L as c}from"./lang-helper-behavior-D3p_DZHb.js";import{V as g}from"./vaadin-upload-behavior-CDR7CRnJ.js";import{E as u,ah as o,ai as h,e as b}from"./main-BEpca-0G.js";import{f as r}from"./feedback-services-C5AV0qYi.js";import"./dropdown-input-B-nqSpts.js";import"./select-partner-input-CNOjp5np.js";import"./select-location-input-Cy4UbHKK.js";import"./select-user-input-BH284c4q.js";import"./select-region-input-CrDRgh49.js";import"./date-time-input-DPw_rHZU.js";import"./image-frame-DZbP5vtK.js";import"./paper-shrink-menu-C7LnALvz.js";import{P as s}from"./page-toolbar-C-8EZufE.js";import{l as f}from"./location-services-B-Yo7g_g.js";import"./BetterHTML-BN6nzApa.js";import"./BetterTemplateHandling-CTXk4mRb.js";import"./ExtendedDate-BLMVein7.js";import"./typography-WuKe67Dy.js";import"./vaadin-button-styles-BwN-jsYe.js";import"./input-mixin-B41Xo3VN.js";import"./translation-mixin-DzuKWY5M.js";import"./dialog-input-behavior-DcN20D9O.js";import"./time-picker-input-C-FyhONN.js";import"./BetterPolymerElement-Dg3wVY7D.js";import"./time-input-B-vVY8XV.js";import"./event-listeners-mixin-CmUvl9h8.js";import"./vaadin-date-picker-C0nM5XdO.js";import"./question-tag-C9ym_uv9.js";import"./diamond-icon-button-AIbsxFeD.js";import"./tippy-tooltip-BFt4tVnx.js";class v extends m(c(g(l))){static get template(){return p` 2 ${super.template} 3 <style> 4 :host { 5 position: relative; 6 width: 100%; 7 height: 100%; 8 display: block; 9 } 10 11 paper-material { 12 width: 100%; 13 margin-bottom: 30px; 14 min-height: 150px; 15 padding: 20px; 16 } 17 18 h2 { 19 margin: 1rem 0; 20 } 21 22 paper-checkbox { 23 margin: 15px 0; 24 } 25 26 .photos { 27 flex-wrap: wrap; 28 justify-content: space-evenly; 29 } 30 31 .photo { 32 height: 100px; 33 width: 130px; 34 margin: 7px; 35 position: relative; 36 background: var(--surface-color); 37 border: 1px solid var(--primary-border-color); 38 border-radius: var(--block-border-radius); 39 padding: 10px; 40 overflow: hidden; 41 } 42 43 .photo:hover .img-overlay, 44 .photo:focus-within { 45 opacity: 1; 46 transition: opacity .2s ease-in; 47 cursor: pointer; 48 } 49 50 .photo .img-overlay { 51 opacity: 0; 52 position: absolute; 53 width: 100%; 54 height: 100%; 55 left: 0; 56 top: 0; 57 z-index: 1; 58 background: rgba(0, 0, 0, .6); 59 display: flex; 60 justify-content: space-around; 61 align-items: center; 62 } 63 64 .img-overlay diamond-icon-button { 65 color: white; 66 } 67 68 .img-overlay diamond-icon-button:not(.remove-button):hover { 69 color: var(--secondary-color); 70 } 71 </style> 72 73 <page-toolbar 74 pending="[[or(loading, sending)]]" 75 error="[[error]]" 76 return-href="[[_getBackRoute(feedbackID, isTask)]]" 77 > 78 <paper-shrink-menu slot="action-buttons" show-labels> 79 <template is="dom-if" if="[[feedbackID]]"> 80 ${s.ACTION_BUTTON.delete()} 81 </template> 82 ${s.ACTION_BUTTON.save()} 83 </paper-shrink-menu> 84 </page-toolbar> 85 86 <div class="content-wrap full-height"> 87 <paper-material> 88 <diamond-section-overlay loading="[[loading]]" error="[[error]]" sending="[[sending]]" on-retry="refresh"></diamond-section-overlay> 89 90 <div class="form flex-row responsive"> 91 <div class="column"> 92 <!-- State --> 93 <dropdown-input label="[[_lang('state')]]" options="${u}" value="{{feedback.state}}" onoptionlabel="translateFeedbackState" disabled="[[feedbackID]]"></dropdown-input> 94 95 <!-- Category --> 96 <dropdown-input label="[[_lang('category')]]" options="${o}" value="{{feedback.category}}" option-lang-prefix="feedbackCategory_" no-deselect></dropdown-input> 97 98 <!-- Subject --> 99 <paper-input label="[[_lang('subject')]]" value="{{feedback.subject}}"></paper-input> 100 101 <!-- Description --> 102 <paper-textarea label="[[_lang('description')]]" value="{{feedback.description}}"></paper-textarea> 103 104 <!-- Comment / Developer notes --> 105 <paper-textarea label="[[_lang('developerNotes')]]" value="{{feedback.comment}}"></paper-textarea> 106 </div> 107 <div class="column"> 108 <!-- Demands response --> 109 <paper-checkbox checked="{{feedback.demandResponse}}">[[_lang('demandResponse')]]</paper-checkbox> 110 111 <!-- Reporter --> 112 <select-user-input label="[[_lang('reporter')]]" value="{{feedback.reporter}}"></select-user-input> 113 114 <!-- Location --> 115 <select-location-input label="[[_lang('location')]]" value="{{feedback.location}}"></select-location-input> 116 117 <!-- Partner --> 118 <select-partner-input label="[[_lang('partner')]]" value="{{feedback.partner}}"></select-partner-input> 119 120 <template is="dom-if" if="[[_showPartnerOrRegionNote(feedback.partner.id, originalFeedback.partner.id)]]"> 121 <div class="note-message"> 122 <span class="note"><b>[[_lang('note')]]:</b> [[_lang('changePartnerOrRegionMessage')]]</span> 123 </div> 124 </template> 125 126 <!-- Region --> 127 <select-region-input label="[[_lang('region')]]" value="{{feedback.region}}"></select-region-input> 128 129 <template is="dom-if" if="[[_showPartnerOrRegionNote(feedback.region.id, originalFeedback.region.id)]]"> 130 <div class="note-message"> 131 <span class="note"><b>[[_lang('note')]]:</b> [[_lang('changePartnerOrRegionMessage')]]</span> 132 </div> 133 </template> 134 135 <!-- Time limit --> 136 <date-time-input label="[[_lang('timeLimit')]]" value="{{feedback.timeLimit}}"></date-time-input> 137 </div> 138 139 <div class="column"> 140 <h3>[[_lang('images')]]</h3> 141 142 <vaadin-upload 143 id="imageUploader" 144 145 ${this.vaadinUploadImageAttributesTemplate()} 146 max-files="[[_getMaxFiles(feedback.images.length)]]" 147 target="[[getApiUrl()]]/image/upload" 148 149 on-upload-abort="_onFileAbort" 150 on-upload-success="_onUploadSuccess" 151 on-upload-request="onUploadRequest" 152 on-file-reject="onFileUploadRejected" 153 ></vaadin-upload> 154 155 <div class="photos flex-row vertical-center"> 156 <template is="dom-repeat" items="[[feedback.images]]" sort="sortByIdDesc"> 157 <div class="photo" image-id$="[[item.id]]"> 158 <div class="img-overlay"> 159 <diamond-icon-button big class="remove-button" icon="delete" on-click="_deleteImage"></diamond-icon-button> 160 </div> 161 <image-frame image="[[item]]"></image-frame> 162 </div> 163 </template> 164 </div> 165 </div> 166 </div> 167 </paper-material> 168 </div> 169 `}static get properties(){return{as:{value:"feedback"},isTask:{type:Boolean,computed:`isEqual(feedback.category, '${o.SERVICE_REQUEST}')`}}}init(e){if(window.feedbackEdit=this,this.$$("#imageUploader")?.set("files",[]),super.init(e),!this.getItemID){const t=this.clone(h),a=b(window.location.search);a.has("task")&&(t.category=o.SERVICE_REQUEST),a.has("locationID")&&(t.location={id:a.get("locationID")},this.setLoading(!0),f.getItem(a.get("locationID")).then(i=>{this.setProperties({[`${this.alias}.location`]:i,[`${this.alias}.partner`]:i.partner,[`${this.alias}.region`]:i.region})}).finally(()=>{this.setLoading(!1)})),this.setItem(t)}}setItem(e){super.setItem(e),this.set("originalFeedback",e&&this.clone(e))}refresh(){super.refresh(e=>r.getItemForEdit(e))}setHeader(e){e?.category===o.SERVICE_REQUEST?this.getItemID?mainHeader.updateTitle("task-edit"):mainHeader.updateTitle("task-creation"):!this.getItemID&&mainHeader.updateTitle("feedback-creation")}saveItem(){return super.saveItem(e=>r.updateItem(e),e=>r.createItem(e))}deleteItem(){return super.deleteItem(e=>r.deleteItem(e),!0)}handleGenericActionData(e){super.handleGenericActionData(e,`/feedback/${(e.create||e.update)?.id}`,this.isTask?"/tasks":"/feedback",["feedback","tasks"],"feedback")}_showPartnerOrRegionNote(e,t){return e!=t&&t!==void 0}
169_onFileAbort({detail:e}){if(e.xhr.responseText){const t=JSON.parse(e.xhr.responseText);this._removeImageByID(t.id)}}_removeImageByID(e){const t=this.get("feedback.images").findIndex(a=>a.id==e);t>-1&&this.splice("feedback.images",t,1)}_removeImageByIDFromUpload(e){const i=(this.$$("#imageUploader")?.files??[]).findIndex(n=>JSON.parse(n.xhr?.responseText||"{}").id==e);i>-1&&this.$$("#imageUploader").splice("files",i,1)}_onUploadSuccess({detail:e}){this.push("feedback.images",JSON.parse(e.xhr.responseText))}_deleteImage(e){let t=this.getAttr(e,"image-id");return window.confirmDialog({title:this._lang("deleteImage"),message:this._lang("deleteImageMessage"),theme:"error"}).then(()=>{d.deleteItem(t).then(()=>{window.toaster.show(this._lang("imageDeletedSuccess")),this._removeImageByID(t),this._removeImageByIDFromUpload(t)})})}_getMaxFiles(e){return 10-(e??0)}_getBackRoute(e,t){return t?this.getBackRoute(e,"/tasks",`/feedback/${e}`):this.getBackRoute(e,"/feedback",`/feedback/${e}`)}}window.customElements.define("feedback-edit",v); 170//# sourceMappingURL=feedback-edit-BLnXs6cv.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.