PageSourceSearch

https://altego.portal.polyfazer.eu/chunks/feedback-edit-BLnXs6cv.js

js polyfazer.eu collected 2026-09-24 14:03:17 UTC 9,064 bytes, 170 lines download raw bytes

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.