!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core"),require("@angular/router"),require("rxjs"),require("@angular/common/http"),require("@angular/common"),require("@angular/platform-browser"),require("crypto-js"),require("@progress/kendo-angular-intl"),require("rxjs/operators"),require("@progress/kendo-angular-notification"),require("@progress/kendo-angular-dialog"),require("@progress/kendo-svg-icons"),require("sprintf-js"),require("@angular/cdk/drag-drop"),require("@progress/kendo-data-query"),require("@progress/kendo-angular-grid"),require("@progress/kendo-angular-common"),require("@progress/kendo-angular-treelist"),require("@angular/forms"),require("@progress/kendo-angular-layout"),require("@progress/kendo-angular-buttons"),require("@progress/kendo-angular-dateinputs"),require("@progress/kendo-angular-inputs"),require("@progress/kendo-angular-dropdowns"),require("@progress/kendo-angular-pager"),require("@progress/kendo-angular-icons"),require("@progress/kendo-angular-menu"),require("@progress/kendo-angular-popup"),require("@progress/kendo-angular-treeview"),require("@progress/kendo-angular-tooltip"),require("@progress/kendo-angular-label")):"function"==typeof define&&define.amd?define("gacoi-lib",["exports","@angular/core","@angular/router","rxjs","@angular/common/http","@angular/common","@angular/platform-browser","crypto-js","@progress/kendo-angular-intl","rxjs/operators","@progress/kendo-angular-notification","@progress/kendo-angular-dialog","@progress/kendo-svg-icons","sprintf-js","@angular/cdk/drag-drop","@progress/kendo-data-query","@progress/kendo-angular-grid","@progress/kendo-angular-common","@progress/kendo-angular-treelist","@angular/forms","@progress/kendo-angular-layout","@progress/kendo-angular-buttons","@progress/kendo-angular-dateinputs","@progress/kendo-angular-inputs","@progress/kendo-angular-dropdowns","@progress/kendo-angular-pager","@progress/kendo-angular-icons","@progress/kendo-angular-menu","@progress/kendo-angular-popup","@progress/kendo-angular-treeview","@progress/kendo-angular-tooltip","@progress/kendo-angular-label"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["gacoi-lib"]={},e.ng.core,e.ng.router,e.rxjs,e.ng.common.http,e.ng.common,e.ng.platformBrowser,e.CryptoJS,e.i2,e.rxjs.operators,e.i1$2,e.i2$1,e.kendoSvgIcons,e.sprintfJs,e.ng.cdk.dragDrop,e.kendoDataQuery,e.kendoAngularGrid,e.kendoAngularCommon,e.kendoAngularTreelist,e.ng.forms,e.kendoAngularLayout,e.kendoAngularButtons,e.kendoAngularDateinputs,e.kendoAngularInputs,e.kendoAngularDropdowns,e.kendoAngularPager,e.kendoAngularIcons,e.kendoAngularMenu,e.kendoAngularPopup,e.kendoAngularTreeview,e.kendoAngularTooltip,e.kendoAngularLabel)}(this,(function(e,t,n,i,r,a,l,o,s,d,c,u,p,f,h,m,g,y,v,b,x,k,I,S,C,w,F,E,T,D,M,P){"use strict";var B,O,N,V,L;(B=e.FieldType||(e.FieldType={}))[B.String=0]="String",B[B.Float=1]="Float",B[B.Int=2]="Int",B[B.Text=3]="Text",B[B.Boolean=4]="Boolean",B[B.Date=5]="Date",B[B.Time=6]="Time",B[B.DateTime=7]="DateTime",B[B.File=8]="File",B[B.Password=9]="Password",(O=e.SortType||(e.SortType={}))[O.Asc=0]="Asc",O[O.Desc=1]="Desc",(N=e.FormStatus||(e.FormStatus={}))[N.View=0]="View",N[N.Edit=1]="Edit",N[N.Insert=2]="Insert",N[N.Copy=3]="Copy",(V=e.SearchType||(e.SearchType={}))[V.Equal=0]="Equal",V[V.NotEqual=1]="NotEqual",V[V.In=2]="In",V[V.NotIn=3]="NotIn",V[V.Contains=4]="Contains",V[V.StartWith=5]="StartWith",V[V.EndWith=6]="EndWith",V[V.NotContains=7]="NotContains",V[V.IsNull=8]="IsNull",V[V.IsNotNull=9]="IsNotNull",(L=e.ServiceCode||(e.ServiceCode={}))[L.Success=200]="Success",L[L.ValidateError=300]="ValidateError",L[L.SystemError=500]="SystemError";var A={Vietnam:"vi",England:"en",Japan:"ja",Usa:"us"},R="delete",W="update",q="bulk_update",j="insert",K="copy",U="bulk_copy",G="setting",H="reset_setting",z="define",_="define_with_data",$="data",J="excel",Z="download",X="import",Y="sample",Q="__action__",ee="__serial__",te="__download_field__",ne="__download_id__",ie="__download_thumbnail__",re="[]",ae=function(){function e(e){var t=this;this.router=e,this.subject=new i.Subject,this.keepAfterRouteChange=!1,this.router.events.subscribe((function(e){e instanceof n.NavigationStart&&(t.keepAfterRouteChange?t.keepAfterRouteChange=!1:t.clear())}))}return e.prototype.getAlert=function(){return this.subject.asObservable()},e.prototype.success=function(e,t){void 0===t&&(t=!1),this.keepAfterRouteChange=t,this.subject.next({type:"success",text:e})},e.prototype.error=function(e,t){void 0===t&&(t=!1),this.keepAfterRouteChange=t,this.subject.next({type:"error",text:e})},e.prototype.clear=function(){this.subject.next()},e}();ae.ɵprov=t.ɵɵdefineInjectable({factory:function(){return new ae(t.ɵɵinject(n.Router))},token:ae,providedIn:"root"}),ae.decorators=[{type:t.Injectable,args:[{providedIn:"root"}]}],ae.ctorParameters=function(){return[{type:n.Router}]};
/*! *****************************************************************************
    Copyright (c) Microsoft Corporation.

    Permission to use, copy, modify, and/or distribute this software for any
    purpose with or without fee is hereby granted.

    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
    AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
    PERFORMANCE OF THIS SOFTWARE.
    ***************************************************************************** */
var le=function(e,t){return le=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},le(e,t)};function oe(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}le(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}Object.create;function se(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],i=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&i>=e.length&&(e=void 0),{value:e&&e[i++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function de(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var i,r,a=n.call(e),l=[];try{for(;(void 0===t||t-- >0)&&!(i=a.next()).done;)l.push(i.value)}catch(e){r={error:e}}finally{try{i&&!i.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}return l}function ce(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(de(arguments[t]));return e}Object.create;var ue={apiRoot:null,languagesApi:"languages",workflowActionApi:"workflow/action",listApi:"list",logicApi:"logic/",businessApi:"business/",formApi:"form/",loginPath:"login",logoutPath:"logout",profilePath:"profile",workflowDataVersionPath:"workflow/data_version",dateFormat:"yyyy/MM/dd",timeFormat:"HH:mm",dateTimeFormat:"yyyy/MM/dd HH:mm:ss",dateFormatWithWeekDay:"yyyy/MM/dd(E)",dateTimeFormatWithWeekDay:"yyyy/MM/dd(E) HH:mm",dateYearMonthFormat:"yyyy/MM",dateFormatServer:"yyyy/MM/dd",dateTimeFormatServer:"yyyy/MM/dd HH:mm:ss",datePickerWeekNumber:!0,datePickerCalendarTypeClassic:!0,timeZone:null,prod:null,dateFieldWidth:90,dateFieldWidthEditMode:145,timeFieldWidth:50,timeFieldWidthEditMode:90,dateTimeFieldWidth:90,dateTimeFieldWidthEditMode:185,dateTimeWeekWidth:30,listBoxMinWidth:110,minFieldWidth:60,defaultGridHeaderFilterable:null,defaultGridAutosize:!0,defaultGridSelection:!1,defaultGridView:!0,defaultGridWrapHeader:!1,defaultGridShowButtonText:!1,defaultGridButtonPrimary:!1,defaultGridButtonOnTop:!1,defaultDefineWithData:!0,defaultTextAreaHeight:150,defaultHeaderGrouping:!1,defaultCheckboxColor:"gray!important",checkboxStyle:null,numberSymbolDecimal:".",numberSymbolGroup:",",try2Login:!1},pe=function(){function t(){}return t.fileFieldName=function(e){return e+"_file_"},t.complexFieldName=function(e){return"@"+e},t.toDatetime=function(e){return e?new Date(e):null},t.objectAssign=function(e,t){var n,i,r,a,l=function(n){var i=t[n],r=e[n];Array.isArray(i)||Array.isArray(r)?(Array.isArray(r)||(r=[],e[n]=r),r.length=0,Array.isArray(i)&&i.length>0&&i.forEach((function(e){r.push(e)}))):e[n]=i};try{for(var o=se(Object.keys(t)),s=o.next();!s.done;s=o.next()){l(u=s.value)}}catch(e){n={error:e}}finally{try{s&&!s.done&&(i=o.return)&&i.call(o)}finally{if(n)throw n.error}}try{for(var d=se(Object.keys(e)),c=d.next();!c.done;c=d.next()){var u=c.value;if(void 0===t[u]){var p=e[u];Array.isArray(p)?p.length=0:"_options_"!==u&&(e[u]=void 0)}}}catch(e){r={error:e}}finally{try{c&&!c.done&&(a=d.return)&&a.call(d)}finally{if(r)throw r.error}}return e},t.stringFormat=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];for(var i=0;i<t.length;i++)e=e.replace("{"+i+"}",t[i]);return e},t.createNumberFormat=function(e){return null!=e?""===e?{style:"decimal",maximumFractionDigits:10}:"n"+e:"#"},t.numberFormat=function(e,t){if(void 0===t&&(t=null),null==e)return"";if(null==t||""===t)return e.toString();var n=e.toString().split(".");return n[0]=n[0].replace(/\B(?=(\d{3})+(?!\d))/g,ue.numberSymbolGroup),t>0&&2===n.length?(n[1]=n[1].substr(0,+t),n.join(ue.numberSymbolDecimal)):n[0]},t.expandTreeListValues=function(e,n){if(void 0===n&&(n=!0),!e)return null;var i=[];return e.forEach((function(e){(i.push({text:e.text,value:e.value}),e.items&&e.items.length>0)&&t.expandTreeListValues(e.items,!1).forEach((function(e){i.push(e)}))})),i},t.toKendoListValues=function(e,t){if(void 0===t&&(t=null),!e)return null;if(e.length>0&&void 0===e[0][0])return e;var n=[];return e.forEach((function(e){for(var t={text:e[1],value:e[0]},i=2;i<e.length;i++)t["extra"+(i-1)]=e[i];n.push(t)})),t&&console.log(t+" call toKendoListValues"),n},t.getListOptionsParams=function(e,t,n,i){if(void 0===n&&(n=null),void 0===i&&(i=null),e.listParam){if(Array.isArray(e.listParam)){var r=[];return e.listParam.forEach((function(e){e===i&&null!==n?r.push(n):t[e]?r.push(t[e]):r.push(-1)})),r}return null!=n?n:null==t[e.listParam]||""===t[e.listParam]?-1:t[e.listParam]}return null},t.getListOptionsKey=function(e,n,i,r){void 0===i&&(i=null),void 0===r&&(r=null);var a=e.listName,l=t.getListOptionsParams(e,n,i,r);return l&&(Array.isArray(l)?l.forEach((function(e){-1!==e&&(a=a+"-"+e)})):-1!==l&&(a+=l)),a},t.compare=function(e,t){if(e&&e.length){if(!t||!t.length||e.length!==t.length)return!1;for(var n=!0,i=0;i<e.length;i++)if(e[i]!==t[i]){n=!1;break}return n}return e===t},t.searchCacheHasValue=function(e){var t=!1;return t=(t=(t=t||null!==e.value1&&""!==e.value1)||null!==e.value2&&""!==e.value2)||e.values&&e.values.length>0},t.searchCacheActive=function(n){return t.searchCacheHasValue(n)||n.type===e.SearchType.IsNull||n.type===e.SearchType.IsNotNull},t.toUnixTimestamp=function(e){return Math.floor(new Date(e).getTime())},t.toHumanDatetime=function(e){return e?new Date(1*e):null},t}(),fe=function(){function t(e,t,n,i){this.http=e,this.router=t,this.datePipe=n,this.sanitizer=i,this.checkDate=null,this.time=null,this.queueGetListValues=[],this.loadingGetListValues=!1}return t.getApiRoot=function(){if(!ue.apiRoot)throw new Error("Api root not set yet.");return ue.apiRoot},t.getFileName=function(e,t){var n;try{n=e.headers.get("content-disposition").split(";")[1].trim().split("=")[1].replace(/"/g,"")}catch(e){console.log(e),n=t}return n=(n=decodeURIComponent(n)).replace(/\+/g," ")},t.getRandomInt=function(e){return Math.floor(Math.random()*Math.floor(e))},t.prototype.encrypt=function(e,t){return o.AES.encrypt(e.trim(),t.trim()).toString()},t.prototype.decrypt=function(e,t){try{return o.AES.decrypt(e,t.trim()).toString(o.enc.Utf8)}catch(e){return null}},t.prototype.trick=function(){if(null===this.checkDate){this.time=window.prod;var e=Date.now()-1e3;if(this.time){var n=this.decrypt(this.time,"2611@action");n&&(e=+n,isNaN(e)&&(e=Date.now()-1e3))}this.checkDate=e}if(Date.now()>this.checkDate&&t.getRandomInt(10)<5)return!1;return!0},t.prototype.navigateToLogin=function(){this.router.navigate([ue.loginPath],{queryParams:{returnUrl:window.location.pathname+window.location.search}}).then()},t.prototype.logout=function(){this.get(ue.logoutPath,null,null)},t.prototype.login=function(e,t,n,i){var r=new FormData;null!==e&&r.append("user",e),null!==t&&r.append("password",t),r.append("remember",String(n)),this.post("login",r,(function(e,t,n){200===e?i(!0,null,n):i(!1,t,null)}))},t.prototype.getSortInfoJson=function(e){if(e.sortInfo){var t=[];return Object.keys(e.sortInfo).forEach((function(n){t.push({name:n,type:e.sortInfo[n]})})),JSON.stringify(t)}return null},t.prototype.getSearchInfoJson=function(t){var n=this;if(t.searchInfo){var i={};return Object.keys(t.searchInfo).forEach((function(r){var a=t.fieldByNames[r];if(a.type===e.FieldType.Date||a.type===e.FieldType.DateTime){var l=Object.assign({},t.searchInfo[r]);l.value1&&(l.value1=n.datePipe.transform(l.value1,a.type===e.FieldType.Date?ue.dateFormatServer:ue.dateTimeFormatServer)),l.value2&&(l.value2=n.datePipe.transform(l.value2,a.type===e.FieldType.Date?ue.dateFormatServer:ue.dateTimeFormatServer)),i[r]=l}else i[r]=t.searchInfo[r]})),JSON.stringify(i)}return null},t.prototype.createFormData=function(e,t,n){var i=new FormData;return null!==n&&Object.keys(n).forEach((function(e){i.append(e,n[e])})),i.append(Q,e),t&&(i.append("pageIndex",t.pageIndex.toString()),i.append("pageSize",t.pageSize.toString()),t.sortInfo&&i.append("sortInfo",this.getSortInfoJson(t)),t.searchInfo&&i.append("searchInfo",this.getSearchInfoJson(t))),i},t.prototype.excel=function(e,t,n,i){var r=this.createFormData(J,t,n),a=[],l=[];t.fields.forEach((function(e){e.excel&&a.push(e.name),l.push(e.name)})),r.append("excelFields",a.join(",")),r.append("orderFields",l.join(",")),this.download(e,r,i)},t.prototype.getBinary=function(e,t,n,i){var r=new FormData;r.append(Q,Z),r.append(te,n),r.append(ne,t.toString()),this.download(e,r,i)},t.prototype.getImage=function(e,t,n,i,r){void 0===i&&(i=0);var a=new FormData;a.append(Q,Z),a.append(te,n),a.append(ne,t),a.append(ie,i.toString()),this.image(e,a,r)},t.prototype.image=function(n,i,r){var a=this;this.http.post(t.getApiRoot()+n,i,{withCredentials:!0,observe:"response",responseType:"blob"}).subscribe((function(t){var n=t.type,i=[];i.push(t.body);var l=URL.createObjectURL(new Blob(i,{type:n.toString()})),o=a.sanitizer.bypassSecurityTrustUrl(l);r&&r(e.ServiceCode.Success,null,o)}),(function(t){a.handleError(t,null),r&&r(e.ServiceCode.SystemError,"Error occurred when download from api "+n,null)}))},t.prototype.download=function(n,i,r){var a=this;!i||i instanceof FormData||i instanceof String||(i=JSON.stringify(i)),this.http.post(t.getApiRoot()+n,i,{withCredentials:!0,observe:"response",responseType:"blob"}).subscribe((function(n){var i=n.type,a=[],l=t.getFileName(n,"export");a.push(n.body);var o=document.createElement("a");o.href=window.URL.createObjectURL(new Blob(a,{type:i.toString()})),o.setAttribute("download",l),document.body.appendChild(o),o.click(),r&&r(e.ServiceCode.Success,null)}),(function(e){a.handleError(e,r)}))},t.prototype.post=function(e,n,i){var r=this;!n||n instanceof FormData||n instanceof String||(n=JSON.stringify(n)),this.http.post(t.getApiRoot()+e,n,{withCredentials:!0}).subscribe((function(e){i&&i(200,null,e)}),(function(e){r.handleError(e,i)}))},t.prototype.get=function(e,n,i){var r=this;void 0===n&&(n=null),this.http.get(t.getApiRoot()+e,{params:n,withCredentials:!0}).subscribe((function(e){i&&i(200,null,e)}),(function(e){r.handleError(e,i)}))},t.prototype.adjustDefine=function(e){e.fieldByNames={},e.invalidInfo={};var t=[];e.fields.forEach((function(n){e.fieldByNames[n.name]=n,n.hidden||t.push(n),n.listValues&&!n.tree&&(n.listKendoValues=pe.toKendoListValues(n.listValues))})),e.fields.forEach((function(e){e.hidden&&t.push(e)})),e.fields=t,e.pageIndex=1,void 0===e.pageSize&&(e.pageSize=10)},t.prototype.defineWidthParam=function(e,t,n,i){var r=this;void 0===t&&(t=!1);var a=new FormData;t?(a.append(Q,_),null!==n&&Object.keys(n).forEach((function(e){a.append(e,n[e])})),this.post(e,a,(function(e,t,n){200===e&&r.adjustDefine(n.define),i(e,t,n)}))):(a.append(Q,z),this.post(e,a,(function(e,t,n){200===e&&r.adjustDefine(n),i(e,t,{define:n,data:null})})))},t.prototype.define=function(e,t){var n=this,i=new FormData;i.append(Q,z),this.post(e,i,(function(e,i,r){200===e&&n.adjustDefine(r),t(e,i,r)}))},t.prototype.data=function(e,t,n,i){if(this.trick()){var r=this.createFormData($,t,n);this.post(e,r,i)}},t.prototype.setting=function(e,t,n,i,r,a,l){var o=new FormData;o.append("page_size",t.pageSize.toString());var s=[],d=[],c=[],u=[],p=[];t.fields.forEach((function(e){d.push(e.name),c.push(e.width),p.push(e.locked),e.show&&s.push(e.name),e.excel&&u.push(e.name)})),o.append("show_fields",s.join(",")),o.append("order_fields",d.join(",")),o.append("width_fields",c.join(",")),o.append("excel_fields",u.join(",")),o.append("locked_fields",p.join(",")),t.sortInfo&&o.append("sort_info",this.getSortInfoJson(t)),t.searchInfo&&o.append("search_info",this.getSearchInfoJson(t)),o.append("mode",i),o.append("setting_name",r),o.append("in_workspace",a?"true":"false"),n?o.append(Q,H):o.append(Q,G),this.post(e,o,l)},t.prototype.import=function(e,t,n){var i=new FormData;i.append(Q,X),Object.keys(t).forEach((function(e){i.append(e,t[e])})),this.post(e,i,n)},t.prototype.sample=function(e,t,n,i){var r=this.createFormData(Y,t,n);this.download(e,r,i)},t.prototype.update=function(e,t,n,i,r){var a=this.toFormData(t,i);Object.keys(n).forEach((function(e){a.append(e,n[e])}));var l=!1,o=!1;i.length>0&&i[0].new&&(l=!0);var s=[];if(t.fields.forEach((function(e){e.key&&s.push(e.name)})),l&&i.length>0){var d=i[0];o=!0,s.forEach((function(e){d[e]||(o=!1)}))}o?a.append(Q,K):l?a.append(Q,j):a.append(Q,W),this.post(e,a,r)},t.prototype.action=function(e,t,n,i,r,a){var l=this.createFormData(t,n,i);this.toFormData(n,r,l),this.post(e,l,a)},t.prototype.delete=function(e,t,n,i,r){var a=this.toFormData(t,i);Object.keys(n).forEach((function(e){a.append(e,n[e])})),a.append(Q,R),this.post(e,a,r)},t.prototype.handleError=function(e,t){if(e.error instanceof ErrorEvent)console.error("An error occurred:",e.error.message),t&&t(null,e.error.message,null);else{var n=!1,i=e.error;if(i instanceof Blob){n=!0;var r=new FileReader;r.onloadend=function(){i=r.result,console.error(i),t&&t(e.status,i,null)},r.readAsText(i)}else i instanceof Object?(i=JSON.stringify(i),console.error(i)):i?(i=i.toString(),console.error(i)):console.log(e);if(401===e.status)return this.logout(),void this.navigateToLogin();t&&!n&&t(e.status,i,null)}},t.prototype.getListValues=function(t,n,i,r,a,l,o,s){var d=this;if(void 0===o&&(o=null),void 0===s&&(s=null),this.loadingGetListValues){var c=this.queueGetListValues.findIndex((function(e){return e.name===t&&e.filter===r&&pe.compare(e.param,i)}));return c>-1?(this.queueGetListValues.splice(c,1),void this.queueGetListValues.unshift({name:t,fixParam:n,param:i,filter:r,max:a,OnCompleted:l,form:o,key:s})):void this.queueGetListValues.push({name:t,fixParam:n,param:i,filter:r,max:a,OnCompleted:l,form:o,key:s})}if(o&&s&&!r&&o.optionsMap[s]&&o.optionsMap[s].length>0){l(o.optionsMap[s],!1,null);var u=this.queueGetListValues.pop();u&&this.getListValues(u.name,u.fixParam,u.param,u.filter,u.max,u.OnCompleted,u.form,u.key)}else{this.loadingGetListValues=!0;var p={name:t,filter:r,max:a,fixParam:n};Array.isArray(i)?p["param[]"]=i:p.param=i,Array.isArray(n)?p["fixParam[]"]=n:p.fixParam=n,this.get(ue.listApi,p,(function(t,n,i){d.loadingGetListValues=!1,t===e.ServiceCode.Success?l(i,!0,0===d.queueGetListValues.length):l(null,null,null);var r=d.queueGetListValues.pop();r&&d.getListValues(r.name,r.fixParam,r.param,r.filter,r.max,r.OnCompleted,r.form,r.key)}))}},t.prototype.toFormData=function(t,n,i){var r,a,l,o=this;if(void 0===i&&(i=null),i||(i=new FormData),!n)return i;var s=!1,d=0;t.fields.forEach((function(e){e.key&&d++}));var c=(null!==(l=t.maxInputVars)&&void 0!==l?l:1e3)-20;if(n.length>0&&n.length*(t.fields.length+d)>c&&(s=!0,c/(t.fields.length+d)),s){var u=[];n.forEach((function(n){var i={};i[ee]=n.serial,t.fields.forEach((function(t){void 0!==n[t.name]&&null!==n[t.name]?t.type===e.FieldType.DateTime||t.type===e.FieldType.Time?i[t.name]=o.datePipe.transform(n[t.name],ue.dateTimeFormatServer):t.type===e.FieldType.Date?i[t.name]=o.datePipe.transform(n[t.name],ue.dateFormatServer):i[t.name]=n[t.name]:i[t.name]=null,t.key&&(i["#"+t.name]=n["#"+t.name])})),u.push(i)})),i.append("_form_data_encoded_",JSON.stringify(u))}if(!s||!t.maxInputVars){var p=function(n){i.append(ee+re,n.serial),t.fields.forEach((function(t){if(t.key&&i.append("#"+t.name+re,n["#"+t.name]),t.type===e.FieldType.File){var r=pe.fileFieldName(t.name),a=n[r];if(a)if("__delete__"===a){var l=new Blob([]);i.append(t.name+re,l,"__delete__")}else i.append(t.name+re,a,a.name);else{l=new Blob([]);i.append(t.name+re,l,"")}}else t.choices?n[t.name]?i.append(t.name+re,JSON.stringify(n[t.name])):i.append(t.name+re,""):void 0!==n[t.name]&&null!==n[t.name]?t.type===e.FieldType.DateTime||t.type===e.FieldType.Time?i.append(t.name+re,o.datePipe.transform(n[t.name],ue.dateTimeFormatServer)):t.type===e.FieldType.Date?i.append(t.name+re,o.datePipe.transform(n[t.name],ue.dateFormatServer)):i.append(t.name+re,n[t.name]):i.append(t.name+re,"")}))};try{for(var f=se(n),h=f.next();!h.done;h=f.next()){p(h.value)}}catch(e){r={error:e}}finally{try{h&&!h.done&&(a=f.return)&&a.call(f)}finally{if(r)throw r.error}}}return i},t.prototype.progress=function(e,n){var i=new r.HttpRequest("POST",t.getApiRoot()+e,n,{reportProgress:!0,withCredentials:!0});this.http.request(i).subscribe((function(e){e.type===r.HttpEventType.DownloadProgress&&(console.log("Process download"),console.log(e)),e.type===r.HttpEventType.Response&&(console.log("Process finished"),console.log(e.body))}))},t}();fe.ɵprov=t.ɵɵdefineInjectable({factory:function(){return new fe(t.ɵɵinject(r.HttpClient),t.ɵɵinject(n.Router),t.ɵɵinject(a.DatePipe),t.ɵɵinject(l.DomSanitizer))},token:fe,providedIn:"root"}),fe.decorators=[{type:t.Injectable,args:[{providedIn:"root"}]}],fe.ctorParameters=function(){return[{type:r.HttpClient},{type:n.Router},{type:a.DatePipe},{type:l.DomSanitizer}]};var he=function(){function e(e){this.api=e,this.pathPermissions={},this.userSubject=new i.BehaviorSubject(JSON.parse(localStorage.getItem("user"))),this.user$=this.userSubject.asObservable()}return Object.defineProperty(e.prototype,"user",{get:function(){return this.userSubject.value},enumerable:!1,configurable:!0}),e.prototype.login=function(e,t,n,i){var r=this;this.api.login(e,t,n,(function(e,t,n){e?(localStorage.setItem("user",JSON.stringify(n)),r.userSubject.next(n),i(!0,null)):i(!1,t)}))},e.prototype.logout=function(){this.api.logout(),localStorage.removeItem("user"),this.userSubject.next(null)},e.prototype.isRole=function(e){return this.user&&Array.isArray(this.user.roles)&&this.user.roles.includes(e)},e.prototype.getRoles=function(){return this.user&&Array.isArray(this.user.roles)?this.user.roles:null},e.prototype.getPathPermissions=function(e){var t=this;if(!this.user||!Array.isArray(this.user.roles))return null;if(Object.keys(this.pathPermissions).includes(e))return this.pathPermissions[e];var n=[];if(Object.entries(this.user.api_path).forEach((function(i){var r=de(i,2),a=r[0],l=r[1];e.indexOf(l)>=0&&t.user.api_module[a]&&t.user.api_module[a].forEach((function(e){n.includes(e)||n.push(e)}))})),0===n.length)this.pathPermissions[e]=null;else{var i=[];n.forEach((function(e){t.user.module_permission[e]&&t.user.module_permission[e].forEach((function(e){i.includes(e)||i.push(e)}))})),this.pathPermissions[e]=i}return this.pathPermissions[e]},e.prototype.isPathPermission=function(e,t){var n=this.getPathPermissions(e);return null==n||n.includes(t)},e.prototype.getModulePermissions=function(e){if(!this.user||!Array.isArray(this.user.roles))return null;if(this.user.module_permission[e]){var t=[];return this.user.module_permission[e].forEach((function(e){t.includes(e)||t.push(e)})),t}return null},e.prototype.isModulePermission=function(e,t){var n=this.getModulePermissions(e);return null==n||n.includes(t)},e}();he.ɵprov=t.ɵɵdefineInjectable({factory:function(){return new he(t.ɵɵinject(fe))},token:he,providedIn:"root"}),he.decorators=[{type:t.Injectable,args:[{providedIn:"root"}]}],he.ctorParameters=function(){return[{type:fe}]};var me=function(){function t(e,t,n){this.api=e,this.localeId=t,this.intlService=n,this.builtinVi={back:"Quay về",view:"Xem",add:"Thêm",edit:"Soạn thảo",cancel:"Hủy bỏ",save:"Lưu",excel:"Excel",copy:"Sao chép",delete:"Xóa",loadSetting:"Chọn thiết lập",saveSetting:"Lưu thiết lập",resetSetting:"Reset thiết lập",include:"Bao gồm",exclude:"Không chứa",contains:"Bao gồm",notContains:"Không chứa",isNull:"Bằng rỗng",isNotNull:"Không rỗng",between:"Ở giữa",outside:"Ở ngoài",startWith:"Bắt đầu với",endWith:"Kết thúc với",no:"Không",yes:"Có",close:"Đóng",sample:"Dữ liệu mẫu",import:"Import",column:"Cột",apply:"Áp dụng",selected:"Đã chọn",unselected:"Chưa được chọn",select:"Chọn",deselect:"Bỏ chọn",selectAll:"Chọn hết",deselectAll:"Bỏ chọn hết",width:"Chiều rộng",locked:"Khóa cột",fitColumn:"Điều chỉnh cột",selectRowMessage:"Hãy chọn ít nhất một hàng.",deleteConfirmMessage:"Bạn có chắc chắn muốn xóa?",deletedMessage:"Đã xóa",updatedMessage:"Đã cập nhật",requiredMessage:"%s là mục bắt buộc nhập",maxMinMessage:"%s phải lớn hơn %s và nhỏ hơn %s",maxMessage:"%s phải nhỏ hơn %s",minMessage:"%s phải lớn hơn %s",maxMinLengthMessage:"Độ dài của %s phải lớn hơn %s và nhỏ hơn %s",equalLengthMessage:"Độ dài của %s phải bằng %s ",maxLengthMessage:"Độ dài của %s phải nhỏ hơn %s",minLengthMessage:"Độ dài của %s phải lớn hơn %s",selectFileImportMessage:"Hãy chọn file import.",importSuccessMessage:"Đã import thành công.",confirm:"Xác nhận",error:"Lỗi",previous:"Về trước",next:"Kế tiếp",groupPanelEmpty:"Rỗng",noRecords:"Không có dữ liệu",pagerFirstPage:"Trang đầu tiên",pagerLastPage:"Trang cuối cùng",pagerPreviousPage:"Trang trước",pagerNextPage:"Trang sau",pagerPage:"trang",pagerItemsPerPage:"dòng / trang",pagerOf:"/",pagerItems:"",pagerPageNumberInputTitle:"Nhập trang",filter:"Tìm kiếm",filterEqOperator:"filterEqOperator",filterNotEqOperator:"filterNotEqOperator",filterIsNullOperator:"filterIsNullOperator",filterIsNotNullOperator:"filterIsNotNullOperator",filterIsEmptyOperator:"filterIsEmptyOperator",filterIsNotEmptyOperator:"filterIsNotEmptyOperator",filterStartsWithOperator:"filterStartsWithOperator",filterContainsOperator:"filterContainsOperator",filterNotContainsOperator:"filterNotContainsOperator",filterEndsWithOperator:"filterEndsWithOperator",filterGteOperator:"filterGteOperator",filterGtOperator:"filterGtOperator",filterLteOperator:"filterLteOperator",filterLtOperator:"filterLtOperator",filterIsTrue:"filterIsTrue",filterIsFalse:"filterIsFalse",filterBooleanAll:"filterBooleanAll",filterAfterOrEqualOperator:"filterAfterOrEqualOperator",filterAfterOperator:"filterAfterOperator",filterBeforeOperator:"filterBeforeOperator",filterBeforeOrEqualOperator:"filterBeforeOrEqualOperator",filterFilterButton:"Tìm kiếm",filterClearButton:"Xóa",filterAndLogic:"filterAndLogic",filterOrLogic:"filterOrLogic",loading:"Loading",columnMenu:"Menu cột",columnSetting:"Thiết lập cột",columns:"Cột",lock:"Khóa",unlock:"Mở khóa",sortable:"Có thể sắp xếp",sortAscending:"Sắp xếp tăng",sortDescending:"Sắp xếp giảm",sortedAscending:"Sắp xếp tăng",sortedDescending:"Sắp xếp giảm",sortedDefault:"Mặc định",columnsApply:"Áp dụng",columnsReset:"Reset",detailExpand:"Mở rộng",detailCollapse:"Thu gọn",filterDateToday:"filterDateToday",filterDateToggle:"filterDateToggle",filterNumericDecrement:"filterNumericDecrement",filterNumericIncrement:"filterNumericIncrement",searchPaneTitle:"Tìm kiếm",searchNull:"Tìm null",reset:"Reset",shownItem:"Mục hiển thị",editItem:"Mục chỉnh sửa",excelItem:"Mục xuất excel",clearFilter:"Bỏ toàn bộ tìm kiếm",editableCheckMessage:"Có dữ liệu không thể soạn thảo đã được chọn",deletableCheckMessage:"Có dữ liệu không thể xóa đã được chọn",selectableCheckMessage:"Hàng này không thể chọn được",all:"Tất cả",na:"N/A",search:"Tìm kiếm",uploadMaxFilesize:"Dung lượng file tối đa"},this.builtinEn={back:"Back",view:"View",add:"Add",edit:"Edit",cancel:"Cancel",save:"Save",excel:"Excel",copy:"Copy",delete:"Delete",loadSetting:"Load setting",saveSetting:"Save setting",resetSetting:"Reset setting",include:"Include",exclude:"Exclude",contains:"Contains",notContains:"Not contains",isNull:"Is null",isNotNull:"Is not null",between:"Between",outside:"Outside",startWith:"Start with",endWith:"End with",no:"No",yes:"Yes",close:"Close",sample:"Sample",import:"Import",column:"Column",apply:"Apply",selected:"Selected",unselected:"Unselected",select:"Select",deselect:"Deselect",selectAll:"Select all",deselectAll:"Deselect all",width:"Width",locked:"Locked",fitColumn:"Fit column",confirm:"Confirm",error:"Error",previous:"Previous",next:"Next",selectRowMessage:"Please select a row.",deleteConfirmMessage:"Are you sure to delete?",deletedMessage:"Deleted",updatedMessage:"Updated",requiredMessage:"%s is required item.",maxMinMessage:"%s must be greater than %s and less than %s",maxMessage:"%s must be less than %s",minMessage:"%s must be greater than %s",maxMinLengthMessage:"%s length must be greater than %s and less than %s",equalLengthMessage:"%s length must equal to %s",maxLengthMessage:"%s length must be less than %s",minLengthMessage:"%s length must be greater than %s",selectFileImportMessage:"Please select import file.",importSuccessMessage:"Imported success.",groupPanelEmpty:"Empty",noRecords:"No records",pagerFirstPage:"First page",pagerLastPage:"Last page",pagerPreviousPage:"Previous page",pagerNextPage:"Next page",pagerPage:"page",pagerItemsPerPage:"rows / page",pagerOf:"/",pagerItems:"",pagerPageNumberInputTitle:"Page number input",filter:"Filter",filterEqOperator:"filterEqOperator",filterNotEqOperator:"filterNotEqOperator",filterIsNullOperator:"filterIsNullOperator",filterIsNotNullOperator:"filterIsNotNullOperator",filterIsEmptyOperator:"filterIsEmptyOperator",filterIsNotEmptyOperator:"filterIsNotEmptyOperator",filterStartsWithOperator:"filterStartsWithOperator",filterContainsOperator:"filterContainsOperator",filterNotContainsOperator:"filterNotContainsOperator",filterEndsWithOperator:"filterEndsWithOperator",filterGteOperator:"filterGteOperator",filterGtOperator:"filterGtOperator",filterLteOperator:"filterLteOperator",filterLtOperator:"filterLtOperator",filterIsTrue:"filterIsTrue",filterIsFalse:"filterIsFalse",filterBooleanAll:"filterBooleanAll",filterAfterOrEqualOperator:"filterAfterOrEqualOperator",filterAfterOperator:"filterAfterOperator",filterBeforeOperator:"filterBeforeOperator",filterBeforeOrEqualOperator:"filterBeforeOrEqualOperator",filterFilterButton:"Filter",filterClearButton:"Clear",filterAndLogic:"filterAndLogic",filterOrLogic:"filterOrLogic",loading:"Loading",columnMenu:"Column menu",columnSetting:"Column setting",columns:"Columns",lock:"Lock",unlock:"Unlock",sortable:"Sortable",sortAscending:"Ascending",sortDescending:"Descending",sortedAscending:"Ascending",sortedDescending:"Descending",sortedDefault:"Default",columnsApply:"Apply",columnsReset:"Reset",detailExpand:"Expand",detailCollapse:"Collapse",filterDateToday:"filterDateToday",filterDateToggle:"filterDateToggle",filterNumericDecrement:"filterNumericDecrement",filterNumericIncrement:"filterNumericIncrement",searchPaneTitle:"Search",searchNull:"Search null",reset:"Reset",shownItem:"Shown item",editItem:"Edit item",excelItem:"Excel export item",clearFilter:"Clear all filter",editableCheckMessage:"Can not edit data is selected",deletableCheckMessage:"Can not delete data is selected",selectableCheckMessage:"This row can not select",all:"All",na:"N/A",search:"Search",uploadMaxFilesize:"Max file size"},this.builtinJa={back:"戻る",view:"表示",add:"追加",edit:"編集",cancel:"キャンセル",save:"保存",excel:"Excel",copy:"複写",delete:"削除",loadSetting:"設定選択",saveSetting:"設定保存",resetSetting:"設定初期化",include:"含む",exclude:"含まない",contains:"含む",notContains:"含まない",isNull:"空白",isNotNull:"空白でない",between:"内側",outside:"外側",startWith:"で始める",endWith:"で終わる",no:"いいえ",yes:"はい",close:"閉じる",sample:"サンプル",import:"インポート",column:"カラム",apply:"適用",selected:"選択済み",unselected:"未選択",select:"選択",deselect:"解除",selectAll:"すべて選択",deselectAll:"すべて解除",width:"幅",locked:"固定",fitColumn:"列幅自動調整",selectRowMessage:"行を選択して下さい。",deleteConfirmMessage:"削除します。宜しいでしょうか。",deletedMessage:"削除しました。",updatedMessage:"更新しました。",requiredMessage:"%sは必須項目です。",maxMinMessage:"%sは%sより大きいと%sより小さい必要です。",maxMessage:"%sは%sより小さい必要です。",minMessage:"%sは%sより大きい必要です。",maxMinLengthMessage:"%sの文字数は%sより大きいと%sより小さい必要です。",equalLengthMessage:"%sの文字数は%sであることが必要です。",maxLengthMessage:"%sの文字数は%sより小さい必要です。",minLengthMessage:"%sの文字数は%sより大きい必要です。。",selectFileImportMessage:"インポートファイルを選択してください。",importSuccessMessage:"インポートしました。",confirm:"確認",error:"エラー",previous:"前へ",next:"次へ",groupPanelEmpty:"空白",noRecords:"データがありません。",pagerFirstPage:"最初のページ",pagerLastPage:"最後のページ",pagerPreviousPage:"前のページ",pagerNextPage:"次のページ",pagerPage:"ページ",pagerItemsPerPage:"行 / ページ",pagerOf:"/",pagerItems:"",pagerPageNumberInputTitle:"ページ番号入力",filter:"検索",filterEqOperator:"filterEqOperator",filterNotEqOperator:"filterNotEqOperator",filterIsNullOperator:"filterIsNullOperator",filterIsNotNullOperator:"filterIsNotNullOperator",filterIsEmptyOperator:"filterIsEmptyOperator",filterIsNotEmptyOperator:"filterIsNotEmptyOperator",filterStartsWithOperator:"filterStartsWithOperator",filterContainsOperator:"filterContainsOperator",filterNotContainsOperator:"filterNotContainsOperator",filterEndsWithOperator:"filterEndsWithOperator",filterGteOperator:"filterGteOperator",filterGtOperator:"filterGtOperator",filterLteOperator:"filterLteOperator",filterLtOperator:"filterLtOperator",filterIsTrue:"filterIsTrue",filterIsFalse:"filterIsFalse",filterBooleanAll:"filterBooleanAll",filterAfterOrEqualOperator:"filterAfterOrEqualOperator",filterAfterOperator:"filterAfterOperator",filterBeforeOperator:"filterBeforeOperator",filterBeforeOrEqualOperator:"filterBeforeOrEqualOperator",filterFilterButton:"検索",filterClearButton:"クリア",filterAndLogic:"filterAndLogic",filterOrLogic:"filterOrLogic",loading:"Loading",columnMenu:"カラムメニュー",columnSetting:"カラム設定",columns:"カラム",lock:"ロック",unlock:"ロック解除",sortable:"検索可能",sortAscending:"昇順",sortDescending:"降順",sortedAscending:"昇順",sortedDescending:"降順",sortedDefault:"既存",columnsApply:"適用",columnsReset:"リセット",detailExpand:"展開",detailCollapse:"縮小",filterDateToday:"filterDateToday",filterDateToggle:"filterDateToggle",filterNumericDecrement:"filterNumericDecrement",filterNumericIncrement:"filterNumericIncrement",searchPaneTitle:"検索",searchNull:"ヌル検索",reset:"リセット",shownItem:"表示項目",editItem:"編集項目",excelItem:"Excel出力項目",clearFilter:"検索条件リセット",editableCheckMessage:"更新でないデータを選択しました。",deletableCheckMessage:"削除でないデータを選択しました。",selectableCheckMessage:"選択できない行です。",all:"すべて",na:"N/A",search:"検索",uploadMaxFilesize:"最大ファイルサイズ"},this.define={locale:A.England,label:{},message:{},lib:this.builtinEn}}return t.retrieveLocale=function(){var e=localStorage.getItem("locale");return null==e&&(e=A.England),e},t.prototype.toFile=function(t){var n=this,i=new FormData;i.append("action","file"),this.api.post(ue.languagesApi,i,(function(i,r,a){i===e.ServiceCode.Success&&n.loadLanguages(a),t&&t(i,r)}))},t.prototype.toDatabase=function(t){var n=this,i=new FormData;i.append("action","database"),this.api.post(ue.languagesApi,i,(function(i,r,a){i===e.ServiceCode.Success&&n.loadLanguages(a),t&&t(i,r)}))},t.prototype.setLocale=function(e,n){void 0===e&&(e=null),void 0===n&&(n=null),e||(e=t.retrieveLocale()),this.changeLocale(e),this.saveLocale(e,n)},t.prototype.label=function(e){return this.define.label[e]||(this.addText(e,1),this.define.label[e]=e),this.define.label[e]},t.prototype.message=function(e){return this.define.message[e]||(this.addText(e,2),this.define.message[e]=e),this.define.message[e]},t.prototype.addText=function(e,t){var n=new FormData;n.append("action","add"),n.append("type",t.toString()),n.append("text",e),this.api.post(""+ue.languagesApi,n,(function(){}))},t.prototype.saveLocale=function(t,n){var i=this;void 0===n&&(n=null),localStorage.setItem("locale",t),this.api.get(ue.languagesApi+"/"+t,null,(function(t,r,a){t===e.ServiceCode.Success&&(i.loadLanguages(a),n&&n())}))},t.prototype.loadLanguages=function(e){var t=this;switch(this.define.locale=e.locale,this.define.locale){case A.Vietnam:this.define.lib=this.builtinVi;break;case A.Japan:this.define.lib=this.builtinJa;break;default:this.define.lib=this.builtinEn}["label","message"].forEach((function(n){e[n]&&Object.keys(e[n]).forEach((function(i){e[n][i]&&(t.define[n][i]=e[n][i])}))}))},t.prototype.changeLocale=function(e){var t=e;e===A.Vietnam?t="vi-VN":e===A.Japan?t="ja-JP":e===A.England?t="en-GB":e===A.Usa&&(t="en-US"),this.localeId=t,this.intlService.localeId=t},t}();me.ɵprov=t.ɵɵdefineInjectable({factory:function(){return new me(t.ɵɵinject(fe),t.ɵɵinject(t.LOCALE_ID),t.ɵɵinject(s.IntlService))},token:me,providedIn:"root"}),me.decorators=[{type:t.Injectable,args:[{providedIn:"root"}]}],me.ctorParameters=function(){return[{type:fe},{type:String,decorators:[{type:t.Inject,args:[t.LOCALE_ID]}]},{type:s.IntlService}]};var ge=function(){function e(){}return e.createBackItem=function(e,t,n){return{formName:e.name,pageIndex:e.pageIndex,pageSize:e.pageSize,path:t,searchInfo:e.searchInfo,sortInfo:e.sortInfo,params:n}},e.prototype.applyState=function(e){for(;this.initializing;);if(this.backwardItem&&e.name===this.backwardItem.formName){var t=this.backwardItem;e.searchInfo=t.searchInfo,e.pageIndex=t.pageIndex,e.sortInfo=t.sortInfo,e.pageSize=t.pageSize}},e.prototype.getStateParams=function(){for(;this.initializing;);return this.backwardItem?this.backwardItem.params:null},e.prototype.backward=function(){if(this.state&&this.state.length>0){var e=this.state[this.state.length-1];this.router.navigateByUrl(e.path,{state:{state:this.state,backward:!0,params:e.params}}).then((function(e){}))}},e.prototype.isBackward=function(){for(;this.initializing;);return!!this.backwardItem},e.prototype.isHaveBackward=function(e){if(void 0===e&&(e=null),e){for(;this.initializing;);return this.backwardItem&&e===this.backwardItem.formName}return this.haveBackward},e.prototype.open=function(e,t){void 0===t&&(t=null);var n=window.open(e,"_blank");return setTimeout((function(){n.focus()}),200),n.params=t,n},e.prototype.navigate=function(t,n,i){var r=this.state;r||(r=[]);var a={formName:null,pageIndex:1,pageSize:1,searchInfo:null,sortInfo:null,path:this.router.url,params:i};n&&(a=e.createBackItem(n,this.router.url,i)),this.router.url!==t&&r.push(a),this.router.navigateByUrl(t,{state:{state:r,backward:!1,params:i}}).then((function(e){}))},e.prototype.params=function(e,t,n){void 0===n&&(n=!1);var i=e.paramMap.pipe(d.map((function(){return window.history.state})));n?i.subscribe((function(e){e.backward&&e.state&&e.state.length>0&&t(e.state[e.state.length-1].params)})):i.subscribe((function(e){t(e.params)}))},e.prototype.backwardParams=function(e,t){this.params(e,t,!0)},e.prototype.init=function(e,t){var n=this;this.initializing=!0,this.state=[],this.haveBackward=!1,this.backwardItem=null,this.router=e,this.activatedRoute=t,this.activatedRoute.paramMap.pipe(d.map((function(){return window.history.state}))).subscribe((function(e){e.backward&&e.state&&e.state.length>0&&(n.backwardItem=e.state.pop()),n.state=e.state,n.state&&n.state.length>0&&(n.haveBackward=!0),n.initializing=!1}))},e}();ge.ɵprov=t.ɵɵdefineInjectable({factory:function(){return new ge},token:ge,providedIn:"root"}),ge.decorators=[{type:t.Injectable,args:[{providedIn:"root"}]}],ge.ctorParameters=function(){return[]};var ye=function(){function e(e,t,n){this.notification=e,this.dialog=t,this.lang=n}return e.prototype.info=function(e,t){void 0===t&&(t=2e3),this.notification.show({content:e,hideAfter:t,animation:{type:"slide",duration:400},position:{horizontal:"center",vertical:"top"},type:{style:"info",icon:!0}})},e.prototype.success=function(e,t){void 0===t&&(t=2e3),this.notification.show({content:e,hideAfter:t,animation:{type:"slide",duration:400},position:{horizontal:"center",vertical:"top"},type:{style:"success",icon:!0}})},e.prototype.warning=function(e,t,n){void 0===t&&(t=4e3),void 0===n&&(n=!1),this.notification.show({content:e,hideAfter:t,animation:{type:"slide",duration:400},position:{horizontal:"center",vertical:"top"},type:{style:"warning",icon:!0},closable:n})},e.prototype.error=function(e,t){void 0===t&&(t=800),this.dialog.open({title:this.lang.define.lib.error,content:e,actions:[{text:this.lang.define.lib.close,primary:!0}],width:t,minWidth:600})},e.prototype.confirm=function(e,t){this.dialog.open({title:this.lang.define.lib.confirm,content:e,actions:[{text:this.lang.define.lib.no,value:!1},{text:this.lang.define.lib.yes,primary:!0,value:!0}],width:450,height:200,minWidth:250}).result.subscribe((function(e){t(e.value)}))},e.prototype.startLoading=function(e,t){void 0===e&&(e=null),void 0===t&&(t="black");var n=document.querySelector("#gcLoadingIndicator");n&&(n.innerHTML=e?'<span class="gc-loading-message" style="color: '+t+';">'+e+"</span>":null,n.className="k-i-loading")},e.prototype.stopLoading=function(){var e=document.querySelector("#gcLoadingIndicator");e&&(e.className=null)},e}();ye.ɵprov=t.ɵɵdefineInjectable({factory:function(){return new ye(t.ɵɵinject(c.NotificationService),t.ɵɵinject(u.DialogService),t.ɵɵinject(me))},token:ye,providedIn:"root"}),ye.decorators=[{type:t.Injectable,args:[{providedIn:"root"}]}],ye.ctorParameters=function(){return[{type:c.NotificationService},{type:u.DialogService},{type:me}]};var ve=function(){function e(e,t){this.router=e,this.auth=t}return e.prototype.canActivate=function(e,t){var n=this;return!!this.auth.user||(ue.try2Login?(console.log("Try login"),this.auth.login(null,null,!1,(function(e,i){e?console.log("Try login OK"):(console.log("Try login Fail"),n.router.navigate([ue.loginPath],{queryParams:{returnUrl:t.url}}).then())}))):this.router.navigate([ue.loginPath],{queryParams:{returnUrl:t.url}}).then(),!1)},e}();ve.ɵprov=t.ɵɵdefineInjectable({factory:function(){return new ve(t.ɵɵinject(n.Router),t.ɵɵinject(he))},token:ve,providedIn:"root"}),ve.decorators=[{type:t.Injectable,args:[{providedIn:"root"}]}],ve.ctorParameters=function(){return[{type:n.Router},{type:he}]};var be=function(){function e(e,t){this.auth=e,this.api=t}return e.prototype.intercept=function(e,t){var n=this;return t.handle(e).pipe(d.catchError((function(e){return 401===e.status&&(n.auth.logout(),n.api.navigateToLogin()),i.throwError(e)})))},e}();be.decorators=[{type:t.Injectable}],be.ctorParameters=function(){return[{type:he},{type:fe}]};var xe=function(){function e(e){this.authenticationService=e}return e.prototype.intercept=function(e,t){var n=this.authenticationService.user;return n&&n.token&&(e=e.clone({setHeaders:{Authorization:"Bearer "+n.token}})),t.handle(e)},e}();xe.decorators=[{type:t.Injectable}],xe.ctorParameters=function(){return[{type:he}]};var ke=function(e){this.template=e,this.onTheRight=!0};ke.decorators=[{type:t.Directive,args:[{selector:"[gcUserButton]"}]}],ke.ctorParameters=function(){return[{type:t.TemplateRef}]},ke.propDecorators={onTheRight:[{type:t.Input}],param:[{type:t.Input}]};var Ie=function(e){this.template=e,this.name=null,this.mode="both",this.summary=!1,this.excepts=null};Ie.decorators=[{type:t.Directive,args:[{selector:"[gcUserField]"}]}],Ie.ctorParameters=function(){return[{type:t.TemplateRef}]},Ie.propDecorators={name:[{type:t.Input}],mode:[{type:t.Input}],summary:[{type:t.Input}],excepts:[{type:t.Input}]};var Se=function(e){this.template=e};Se.decorators=[{type:t.Directive,args:[{selector:"[gcUserGridEditForm]"}]}],Se.ctorParameters=function(){return[{type:t.TemplateRef}]};var Ce=function(){function e(e,t){this.lang=e,this.state=t,this.marginBottom=5,this.marginRight=5}return e.prototype.ngOnInit=function(){},e.prototype.backward=function(){this.state.backward()},e.prototype.onKeydownHandler=function(e){var t=document.activeElement.tagName;"INPUT"!==t&&"TEXTAREA"!==t&&(e.preventDefault(),this.state.backward())},e}();Ce.decorators=[{type:t.Component,args:[{selector:"gc-back-button",template:'<button  *ngIf="state.isHaveBackward()"\n         kendoButton\n         [style]="{marginBottom: marginBottom ? (marginBottom + \'px\'): null,\n         marginRight: marginRight ? (marginRight + \'px\'): null}"\n         [icon]="\'arrow-chevron-left\'"\n         [look]="\'outline\'" [primary]="true"\n         (click)="backward()">{{ lang.define.lib.back }}\n\n</button>\n',styles:["gc-back-button{margin-right:4px;margin-bottom:4px}"]}]}],Ce.ctorParameters=function(){return[{type:me},{type:ge}]},Ce.propDecorators={marginBottom:[{type:t.Input}],marginRight:[{type:t.Input}],onKeydownHandler:[{type:t.HostListener,args:["document:keydown.backspace",["$event"]]}]};var we=function(){function e(e){this.lang=e,this.randId=null,this.radioName=null,this.radio=!1,this.showNA=!1,this.numberValue=!1,this.maxHeight=null,this.width=null,this.labelPosition="top",this.readonly=!1,this.valuesValue=null,this.dateFormat=ue.dateFormat,this.cellWidth=null,this.disable=!1,this.indeterminate=!1,this.selectedAll=!1,this.valuesChange=new t.EventEmitter,this.configValueForShow=[],this.configValue=[{value:"mon",text:"Mon"},{value:"tue",text:"Tue"},{value:"wed",text:"Wed"},{value:"thu",text:"Thu"},{value:"fri",text:"Fri"},{value:"sat",text:"Sat"},{value:"sun",text:"Sun"}],this.configMapValue={mon:"Mon",tue:"Tue",wed:"Wed",thu:"Thu",fri:"Fri",sat:"Sat",sun:"Sun"},this.colsValue=null,this.radioName="radio"+Math.random().toString(36).substring(2,15)+Math.random().toString(36).substring(2,15),this.randId="radioId"+Math.random().toString(36).substring(2,15)+Math.random().toString(36).substring(2,15)}return Object.defineProperty(e.prototype,"values",{get:function(){return this.valuesValue},set:function(e){e||(e=[]),this.valuesValue=e,this.initConfig(),this.updateSelectedAll()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"config",{get:function(){return this.configValue},set:function(e){var t=this;this.configValue=e||[],this.configMapValue={},null!=e&&e.forEach((function(e){void 0!==e.text&&void 0!==e.value&&(e.field=e.value,e.caption=e.text),t.configMapValue[e.field]=e.caption})),this.initConfig(),this.updateSelectedAll()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"cols",{get:function(){return this.colsValue},set:function(e){this.colsValue=e,this.initConfig()},enumerable:!1,configurable:!0}),e.focusControl=function(e){var t=document.querySelector('[controls="'+e+'"]');if(t)if("INPUT"===t.tagName||"TEXTAREA"===t.tagName||"SELECT"===t.tagName)t.focus();else{var n=t.querySelector(".k-input");n&&n.focus()}},e.prototype.pushRow=function(e,t){var n=!1;return this.readonly&&this.valuesValue?this.valuesValue instanceof Array?this.valuesValue.includes(t.field)&&(e.push(t),n=!0):this.valuesValue[t.field]&&(e.push(t),n=!0):(e.push(t),n=!0),n},e.prototype.initConfig=function(){var e=this;if(this.configValue)if(this.colsValue){this.configValueForShow=[];var t=0,n=[];this.configValue.forEach((function(i){e.pushRow(n,i)&&t++,t%e.colsValue==0&&(e.configValueForShow.push(n),n=[])})),n.length>0&&this.configValueForShow.push(n)}else{var i=[];this.configValue.forEach((function(t){e.pushRow(i,t)})),this.configValueForShow=[i]}},e.prototype.isCheck=function(e){return!!this.valuesValue&&(this.valuesValue instanceof Array?this.valuesValue.includes(e):this.valuesValue[e])},e.prototype.radioUpdate=function(e){var t=e.target.value;this.numberValue&&(t=+e.target.value),this.valuesValue instanceof Array?e.target.checked?this.valuesValue=[t]:this.valuesValue=[]:(this.valuesValue={},this.valuesValue[t]=e.target.checked),this.valuesChange.emit(this.values)},e.prototype.checkUpdate=function(e){var t=e.target.value;if(this.numberValue&&(t=+e.target.value),null!==this.valuesValue&&void 0!==this.valuesValue||(this.valuesValue=[]),this.valuesValue instanceof Array){var n=this.valuesValue.indexOf(t,0);n>-1&&this.valuesValue.splice(n,1),e.target.checked&&this.valuesValue.push(t)}else this.valuesValue[t]=e.target.checked;this.valuesChange.emit(this.values),this.updateSelectedAll()},e.prototype.check=function(e){var t=this;if(void 0===e&&(e=!0),this.radio)return e&&(this.valuesValue instanceof Array?this.valuesValue=[]:this.valuesValue={}),this.valuesChange.emit(this.values),void this.updateSelectedAll();null!==this.valuesValue&&void 0!==this.valuesValue||(this.valuesValue=[]),this.valuesValue instanceof Array?(this.valuesValue.splice(0,this.valuesValue.length),Object.keys(this.configMapValue).forEach((function(n){e&&(t.numberValue?t.valuesValue.push(+n):t.valuesValue.push(n))}))):Object.keys(this.configMapValue).forEach((function(n){t.valuesValue[n]=e})),this.valuesChange.emit(this.values),this.updateSelectedAll()},e.prototype.updateSelectedAll=function(){var e=this,t=0,n=Object.keys(this.configMapValue).length;this.valuesValue&&(this.valuesValue instanceof Array?t=this.valuesValue.length:Object.keys(this.valuesValue).forEach((function(n){e.valuesValue[n]&&void 0!==e.configMapValue[n]&&t++}))),this.radio?(this.indeterminate=!1,setTimeout((function(){e.selectedAll=0===t}),200)):0===t?(this.indeterminate=!1,this.selectedAll=!1):t===n?(this.indeterminate=!1,this.selectedAll=!0):(this.indeterminate=!0,this.selectedAll=!1)},e.prototype.checkSelectedAll=function(){var e;e=!!this.indeterminate||!this.selectedAll,this.check(e)},e.prototype.focus=function(){e.focusControl("all-select")},e.prototype.ngOnInit=function(){this.initConfig()},e}();we.decorators=[{type:t.Component,args:[{selector:"gc-all-select",template:'<div [style.max-height]="maxHeight?maxHeight+\'px\' : null" style="overflow-y: auto" [style.width]="width">\r\n\x3c!--  <ng-template [ngIf]="readonly">--\x3e\r\n\x3c!--    <ng-container *ngFor="let row of configValueForShow;let i= index">--\x3e\r\n\x3c!--      <ng-container *ngFor="let item of row;let j=index">--\x3e\r\n\x3c!--        <kendo-chip--\x3e\r\n\x3c!--          [label]="item.caption"--\x3e\r\n\x3c!--          [removable]="false"--\x3e\r\n\x3c!--        >--\x3e\r\n\x3c!--        </kendo-chip>--\x3e\r\n\x3c!--      </ng-container>--\x3e\r\n\r\n\x3c!--    </ng-container>--\x3e\r\n\r\n\x3c!--  </ng-template>--\x3e\r\n  <table class="all-select" [ngClass]="{\'disable\':disable}" [style.width]="width" >\r\n    <ng-template [ngIf]="readonly">\r\n      <ng-container *ngFor="let row of configValueForShow; let i = index">\r\n        <tr>\r\n          <td *ngFor="let item of row;let j=index" [style.width]="cellWidth ? cellWidth + \'px\': null">\r\n            <table>\r\n              <tr>\r\n                <td style="width: 1%">\r\n                  <kendo-icon name="check" size="small"></kendo-icon>\r\n                </td>\r\n                <td style="width: 99%;text-align: left;">\r\n                  {{ item.caption }}\r\n                </td>\r\n              </tr>\r\n            </table>\r\n\r\n          </td>\r\n        </tr>\r\n      </ng-container>\r\n    </ng-template>\r\n    <ng-template [ngIf]="labelPosition===\'top\' && !readonly">\r\n      <ng-container *ngFor="let row of configValueForShow; let i = index">\r\n        <tr>\r\n          <th\r\n            *ngIf="!radio || showNA"\r\n            style="color: blue;vertical-align: bottom;padding-bottom: 0;padding-top: 8px;width: 0; white-space: nowrap">\r\n            <label class="k-checkbox-label" for="{{randId}}_all">{{ i === 0? (radio ? lang.define.lib.na : lang.define.lib.all): null}}</label>\r\n          </th>\r\n          <td *ngFor="let item of row; let j=index" style="vertical-align: bottom;padding-bottom: 0;padding-top: 8px;">\r\n            <label class="k-checkbox-label" for="{{randId}}{{i}}_{{j}}">{{ item.caption }}</label>\r\n          </td>\r\n        </tr>\r\n        <tr>\r\n          <td style="padding-top: 2px;width: 0;" *ngIf="!radio || showNA">\r\n            <input type="checkbox"\r\n                   id="{{randId}}_all"\r\n                   *ngIf="i===0"\r\n                   [attr.controls]="\'all-select\'"\r\n                   kendoCheckBox [indeterminate]="indeterminate" [(ngModel)]="selectedAll" (click)="checkSelectedAll()">\r\n          </td>\r\n          <td *ngFor="let item of row; let j=index" [style.width]="cellWidth ? cellWidth + \'px\': null" style="padding-top: 0;">\r\n            \x3c!--suppress XmlDuplicatedId --\x3e\r\n            <input\r\n              *ngIf="!radio"\r\n              id = "{{randId}}{{i}}_{{j}}"\r\n              (change)="checkUpdate($event)"\r\n              [value]="item.field"\r\n              [checked]="isCheck(item.field)"\r\n              type="checkbox" kendoCheckBox\r\n            >\r\n\r\n            \x3c!--suppress XmlDuplicatedId --\x3e\r\n            <input\r\n              *ngIf="radio"\r\n              id = "{{randId}}{{i}}_{{j}}"\r\n              type="radio" kendoRadioButton\r\n              (change)="radioUpdate($event)"\r\n              name="{{radioName}}"\r\n              [checked]="isCheck(item.field)"\r\n              [value]="item.field">\r\n\x3c!--            [(ngModel)]="values[item.field]"--\x3e\r\n\x3c!--            (ngModelChange)="values=valuesValue"--\x3e\r\n\r\n          </td>\r\n        </tr>\r\n      </ng-container>\r\n    </ng-template>\r\n    <ng-template [ngIf]="labelPosition===\'right\' && !readonly">\r\n      <ng-container *ngFor="let row of configValueForShow; let i = index">\r\n        <tr>\r\n          <td [style.width]="\'40px\'" *ngIf="!radio || showNA">\r\n            <table *ngIf="i===0">\r\n              <tr>\r\n                <td>\r\n                  <input type="checkbox"\r\n                         id="{{randId}}_all_h"\r\n                         [attr.controls]="\'all-select\'"\r\n                         kendoCheckBox [indeterminate]="indeterminate" [(ngModel)]="selectedAll" (click)="checkSelectedAll()">\r\n                </td>\r\n                <th style="white-space: nowrap">\r\n                  <label class="k-checkbox-label" for="{{randId}}_all_h" style="color: blue">\r\n                    {{ radio ? lang.define.lib.na : lang.define.lib.all }}\r\n                  </label>\r\n                </th>\r\n              </tr>\r\n            </table>\r\n          </td>\r\n          <td *ngFor="let item of row;let j=index" [style.width]="cellWidth ? cellWidth + \'px\': null">\r\n            <table>\r\n              <tr>\r\n                <td style="width: 15px">\r\n                  \x3c!--suppress XmlDuplicatedId --\x3e\r\n                  <input\r\n                    *ngIf="!radio"\r\n                    id = "{{randId}}{{i}}_{{j}}"\r\n                    (change)="checkUpdate($event)"\r\n                    [value]="item.field"\r\n                    [checked]="isCheck(item.field)"\r\n                    type="checkbox" kendoCheckBox>\r\n                  \x3c!--suppress XmlDuplicatedId --\x3e\r\n                  <input\r\n                    *ngIf="radio"\r\n                    id = "{{randId}}{{i}}_{{j}}"\r\n                    type="radio" kendoRadioButton\r\n                         (change)="radioUpdate($event)"\r\n                         name="{{radioName}}"\r\n                         [checked]="isCheck(item.field)"\r\n                         [value]="item.field">\r\n                </td>\r\n                <td style="width: 90%; text-align: left;">\r\n                  \x3c!--suppress TypeScriptUnresolvedVariable --\x3e\r\n                  <label class="k-checkbox-label" for="{{randId}}{{i}}_{{j}}">{{ item.caption }}</label>\r\n                </td>\r\n              </tr>\r\n            </table>\r\n          </td>\r\n        </tr>\r\n      </ng-container>\r\n    </ng-template>\r\n  </table>\r\n</div>\r\n',styles:[".disable{pointer-events:none;opacity:.4}table.all-select td,table.all-select th{text-align:center;padding-left:0;border:initial;background:initial;text-overflow:unset}table.all-select tr:hover{background:initial}table.all-select{table-layout:auto;width:auto}.k-chip{margin-right:4px}"]}]}],we.ctorParameters=function(){return[{type:me}]},we.propDecorators={radio:[{type:t.Input}],showNA:[{type:t.Input}],numberValue:[{type:t.Input}],maxHeight:[{type:t.Input}],width:[{type:t.Input}],labelPosition:[{type:t.Input}],readonly:[{type:t.Input}],values:[{type:t.Input}],cellWidth:[{type:t.Input}],disable:[{type:t.Input}],valuesChange:[{type:t.Output}],config:[{type:t.Input}],cols:[{type:t.Input}]};var Fe=function(){function n(n,i,r,a){var l=this;this.componentFactoryResolver=n,this.api=i,this.state=r,this.lang=a,this.valueChanged=!1,this.icons={checkIcon:p.checkIcon,checkboxCheckedIcon:p.checkboxCheckedIcon,checkboxIcon:p.checkboxIcon},this.dateFormat={Date:ue.dateFormat,DateTime:ue.dateTimeFormat,TimeZone:ue.timeZone,Time:ue.timeFormat},this.config=ue,this.TypeEnum=e.FieldType,this.autocompleteOptions=[],this.data=[],this.autocompleteData=[],this.optionsKey=null,this.defaultTextAreaHeight=ue.defaultTextAreaHeight,this.multiSelectShowAll=!1,this.multiSelectMaxShownItems=5,this.multiSelectMaxShownItemLength=30,this.multiSelectRadioMode=!1,this.multiSelectCheckMode=!1,this.multiSelectCols=null,this.multiSelectMaxHeight=null,this.multiSelectLabelPosition="right",this.alignByDataType=!0,this.thumbnail=1,this.width="100%",this.changed=new t.EventEmitter,this.detailMultiSelect=new t.EventEmitter,this.isLoading=!1,this.image=null,this.valueChange=new t.EventEmitter,this.baseForm=null,this.dropdownTreeDataItem={text:"ABC",value:12},this.numberFormatter=function(e){return null==e?"":l.define&&void 0!==l.define.decimal&&null!==l.define.decimal?pe.numberFormat(e,l.define.decimal):e}}return Object.defineProperty(n.prototype,"record",{get:function(){return this.recordVar},set:function(e){this.recordVar=e,this.loadImage()},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"apiUrl",{get:function(){return this.apiUrlVar},set:function(e){this.apiUrlVar=e},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"value",{get:function(){return this.fieldValue},set:function(e){this.fieldValue=e,this.valueChange.emit(this.fieldValue),this.init(),this.form&&this.define&&this.define.listName&&this.define.tree&&this.findDropdownDataItem()},enumerable:!1,configurable:!0}),n.prototype.findDropdownDataItem=function(e){var t,n,i=this;if(void 0===e&&(e=null),e||(e=this.form.optionsMap[this.optionsKey]),!e||e.length<1||!this.value)return!1;var r=e.findIndex((function(e){return e.value===i.value}));if(r>-1)return this.dropdownTreeDataItem=e[r],!0;try{for(var a=se(e),l=a.next();!l.done;l=a.next()){var o=l.value;if(o.items&&this.findDropdownDataItem(o.items))return!0}}catch(e){t={error:e}}finally{try{l&&!l.done&&(n=a.return)&&n.call(a)}finally{if(t)throw t.error}}return!1},n.prototype.init=function(){if(this.form&&this.define&&this.define.listName&&!this.define.autocomplete){if(this.data&&this.data.length>1&&!this.define.listParam)return;if(this.form.optionsMap||(this.form.optionsMap={}),this.optionsKey=pe.getListOptionsKey(this.define,this.record),this.define.choices||this.define.tree)this.form.optionsMap[this.optionsKey]&&!this.define.listParam?this.data=this.form.optionsMap[this.optionsKey].slice():this.getListValues(this.define,null,null,(function(){}));else{var e=pe.complexFieldName(this.define.name);if(this.record[e])this.data=[this.record[e]];else if(this.value){if(this.form.optionsMap&&this.form.optionsMap[this.optionsKey]&&this.form.optionsMap[this.optionsKey].length>0)return void(this.data=this.form.optionsMap[this.optionsKey].slice());this.getListValues(this.define,null,null,(function(){}))}}}},n.prototype.ngOnInit=function(){this.define&&(null!==this.define.multiSelectShowAll&&(this.multiSelectShowAll=this.define.multiSelectShowAll),this.define.multiSelectMaxShownItems>0&&(this.multiSelectMaxShownItems=this.define.multiSelectMaxShownItems),this.define.multiSelectMaxShownItemLength>0&&(this.multiSelectMaxShownItemLength=this.define.multiSelectMaxShownItemLength),null!==this.define.multiSelectLabelPosition&&(this.multiSelectLabelPosition=this.define.multiSelectLabelPosition),null!==this.define.multiSelectRadioMode&&(this.multiSelectRadioMode=this.define.multiSelectRadioMode),this.multiSelectCheckMode=null!==this.define.multiSelectCheckMode?this.define.multiSelectCheckMode:this.multiSelectCheckMode,null!==this.define.multiSelectMaxHeight&&(this.multiSelectMaxHeight=this.define.multiSelectMaxHeight),null!==this.define.multiSelectCols&&(this.multiSelectCols=this.define.multiSelectCols),this.define.showWeekDay&&(this.dateFormat={Date:ue.dateFormatWithWeekDay,DateTime:ue.dateTimeFormatWithWeekDay,TimeZone:ue.timeZone,Time:ue.timeFormat}))},n.prototype.getNumberFormat=function(){return pe.createNumberFormat(this.define.decimal)},n.prototype.ngOnChanges=function(e){},n.prototype.onChange=function(e,t){var n=this;if(void 0===t&&(t=null),this.form&&this.define){if(this.form.invalidInfo[this.record.serial]&&this.form.invalidInfo[this.record.serial][this.define.name]&&delete this.form.invalidInfo[this.record.serial][this.define.name],(this.define.listName||this.define.listValues)&&!this.define.autocomplete&&!this.form.inCellEditField)this.form.fields.forEach((function(e){if(!e.autocomplete&&e.listParam){var t=e.listParam===n.define.name;if(Array.isArray(e.listParam)&&(t=e.listParam.includes(n.define.name)),e.name===n.define.name&&(t=!1),t){var i=pe.getListOptionsKey(e,n.record);if(n.form.optionsMap[i]){if(n.form.optionsMap[i].findIndex((function(t){return t.value===n.record[e.name]}))<0){var r=pe.complexFieldName(e.name);n.record[e.name]=null,n.record[r]=null}}else n.getListValues(e,null,null,(function(t){var r=pe.complexFieldName(e.name);n.record[e.name]=null,n.record[r]=null,e.tree?n.form.optionsMap[i]=t:n.form.optionsMap[i]=pe.toKendoListValues(t)}))}}}));var i=null;if(this.define.tree&&this.dropdownTreeDataItem&&(t=this.dropdownTreeDataItem.text),t){var r=pe.complexFieldName(this.define.name);this.record[r]={value:e,text:t}}else if(void 0!==e){var a=null;if(this.define.listValues)a=this.define.listKendoValues;else if(this.define.listName&&!this.define.autocomplete){var l=pe.getListOptionsKey(this.define,this.record);a=this.form.optionsMap[l]}if(a){var o=a.findIndex((function(t){return t.value===e}));i=a[o];r=pe.complexFieldName(this.define.name);o>-1?this.record[r]={value:e,text:a[o].text}:(console.log("Update complex but not found"),console.log(a),console.log(e))}}this.changed&&this.changed.emit({value:e,listItem:i})}},n.prototype.download=function(){var t=this.record.id,n=this.define.name;t&&this.apiUrl&&this.api.getBinary(this.apiUrl,t,n,(function(t,n){t!==e.ServiceCode.Success&&alert(n)}))},n.prototype.loadImage=function(){var t=this;if(this.define&&this.define.image&&this.record&&this.apiUrl){var n=this.record.id;if(this.define.imageParams){var i=this.define.imageParams.split(","),r=[];i.forEach((function(e){t.record[e]&&r.push(t.record[e])})),r.length>0&&(n=r.join(","))}if(!n)return;this.image=null;var a=this.define.name;(this.record[a]||this.define.imageParams)&&this.api.getImage(this.apiUrl,n,a,this.thumbnail,(function(n,i,r){n===e.ServiceCode.Success&&(t.image=r)}))}},n.prototype.navigate=function(e){var t=this.link(this.record);if(t)if(Array.isArray(t)||(t=[t]),e.ctrlKey){var n=window.open(t[0],"_blank");setTimeout((function(){n.focus()}),200)}else{var i=null;t.length>1&&(i=t[1]),this.state.navigate(t[0],this.form,i)}},n.prototype.deleteFile=function(){var e=pe.fileFieldName(this.define.name);this.record[e]="__delete__",this.record[this.define.name]=null},n.prototype.onFileChange=function(e){var t=pe.fileFieldName(this.define.name);e.target.files&&e.target.files.length?this.record[t]=e.target.files[0]:delete this.record[t]},n.prototype.text=function(){var e=pe.complexFieldName(this.define.name);return this.record[e]?this.record[e].text:this.value},n.prototype.onAutocompleteInput=function(e){var t=this;if(!this.isLoading){var n=e.target.value;n&&this.autocompleteTextExist(n)||(this.isLoading=!0,this.getListValues(this.define,n,null,(function(e){t.isLoading=!1,t.autocompleteOptions=[],e&&(e.forEach((function(e){void 0!==e.text?t.autocompleteOptions.push(e.text):t.autocompleteOptions.push(e[1])})),t.autocompleteData=t.autocompleteOptions.slice())})))}},n.prototype.onListFocus=function(e,t){var n=this;if(void 0===e&&(e=null),void 0===t&&(t=!1),!t||!this.isLoading){var i=pe.getListOptionsKey(this.define,this.record);if(this.optionsKey=i,this.form.optionsMap[i]&&this.form.optionsMap[i].length>0)this.data=this.form.optionsMap[i].slice();else{var r=null;e&&(r=e.target.value),r&&this.listTextExist(r)||(this.isLoading=!0,this.getListValues(this.define,r,null,(function(){n.isLoading=!1})))}}},n.prototype.listTextExist=function(e){return!!this.form.optionsMap[this.define.listName]&&this.form.optionsMap[this.define.listName].findIndex((function(t){return!!t.text&&-1!==t.text.toLowerCase().indexOf(e.toLowerCase())}))>-1},n.prototype.autocompleteTextExist=function(e){return!!this.autocompleteOptions&&this.autocompleteOptions.findIndex((function(t){return-1!==t.toLowerCase().indexOf(e.toLowerCase())}))>-1},n.prototype.getListValues=function(e,t,n,i){var r=this,a=pe.getListOptionsParams(e,this.record),l=pe.getListOptionsKey(e,this.record);this.api.getListValues(e.listName,e.listFixParam,a,t,n,(function(t,n,l){t&&r.define===e&&(r.define.tree?r.form.optionsMap[r.optionsKey]=t:r.form.optionsMap[r.optionsKey]=pe.toKendoListValues(t),r.data=r.form.optionsMap[r.optionsKey].slice()),i(t),r.baseForm&&n&&(r.baseForm.listed.emit({completed:l,field:e,param:a,data:t}),r.baseForm.afterListed({completed:l,field:e,param:a,data:t}))}),this.form,l)},n.prototype.handleFilter=function(e){var t=pe.getListOptionsKey(this.define,this.record);this.form.optionsMap[t]&&(this.data=this.form.optionsMap[t].filter((function(t){if(!t.text)return!1;var n=-1!==t.text.toLowerCase().indexOf(e.toLowerCase());return!n&&t.extra1&&(n=-1!==t.extra1.toLowerCase().indexOf(e.toLowerCase())),n})))},n.prototype.handleAutocompleteFilter=function(e){this.autocompleteData=this.autocompleteOptions.filter((function(t){return-1!==t.toLowerCase().indexOf(e.toLowerCase())})),this.autocompleteData.length<1&&(this.autocompleteData=this.autocompleteOptions.slice())},n.prototype.checkboxClick=function(e){var t=this;e.ctrlKey&&(e.preventDefault(),setTimeout((function(){t.value=null}),100))},n}();Fe.decorators=[{type:t.Component,args:[{selector:"gc-field",template:'<ng-template [ngIf]="define && form">\r\n  <ng-template *ngIf="define.editMode || (editable && define.editable);then editBlock; else viewBlock"></ng-template>\r\n\r\n  <ng-template #viewBlock>\r\n    <ng-container *ngIf="define.listValues && !define.choices;else autoCompleteField">\r\n      <ng-template *ngIf="link;then linkBlock; else normalBlock"></ng-template>\r\n      <ng-template #linkBlock>\r\n        <a (click)="navigate($event)">{{ text() }}</a>\r\n      </ng-template>\r\n      <ng-template #normalBlock>\r\n        <ng-template [ngIf]="define.listColors">\r\n          <gc-chip [color]="define.listColors[value]">{{ text() }}</gc-chip>\r\n        </ng-template>\r\n        <ng-template [ngIf]="!define.listColors">{{ text() }}</ng-template>\r\n      </ng-template>\r\n    </ng-container>\r\n    <ng-template #autoCompleteField>\r\n      <ng-container *ngIf="define.listName && !define.choices && !define.autocomplete;else checkField">\r\n        <ng-template *ngIf="link;then linkBlock; else normalBlock"></ng-template>\r\n        <ng-template #linkBlock>\r\n          <a (click)="navigate($event)">{{ text() }}</a>\r\n        </ng-template>\r\n        <ng-template #normalBlock>\r\n          {{ text() }}\r\n        </ng-template>\r\n      </ng-container>\r\n    </ng-template>\r\n    <ng-template #checkField>\r\n      <ng-container *ngIf="define.choices;else normalField">\r\n        <gc-multi-select\r\n          [field]="define"\r\n          *ngIf="define.listName"\r\n\r\n          [radioMode]="multiSelectRadioMode"\r\n          [checkMode]="multiSelectCheckMode"\r\n          [cols]="multiSelectCols"\r\n          [showAll]="multiSelectShowAll"\r\n          [maxShownItems]="multiSelectMaxShownItems"\r\n          [maxShownItemLength]="multiSelectMaxShownItemLength"\r\n          [maxHeight]="multiSelectMaxHeight"\r\n          [labelPosition]="multiSelectLabelPosition"\r\n\r\n          [listKendo]="form.optionsMap[optionsKey]"\r\n                         [simpleMode]="define.simpleChoices"\r\n                         (detail)="detailMultiSelect.emit($event)"\r\n                         [(values)]="value"\r\n                         [readonly]="true">\r\n        </gc-multi-select>\r\n\r\n        <gc-multi-select\r\n          [field]="define"\r\n          *ngIf="define.listValues"\r\n\r\n          [radioMode]="multiSelectRadioMode"\r\n          [checkMode]="multiSelectCheckMode"\r\n          [cols]="multiSelectCols"\r\n          [showAll]="multiSelectShowAll"\r\n          [maxShownItems]="multiSelectMaxShownItems"\r\n          [maxShownItemLength]="multiSelectMaxShownItemLength"\r\n          [maxHeight]="multiSelectMaxHeight"\r\n          [labelPosition]="multiSelectLabelPosition"\r\n\r\n          [listKendo]="define.listKendoValues"\r\n          [simpleMode]="define.simpleChoices"\r\n          (detail)="detailMultiSelect.emit($event)"\r\n          [(values)]="value"\r\n          [readonly]="true">\r\n        </gc-multi-select>\r\n\r\n      </ng-container>\r\n    </ng-template>\r\n    <ng-template #normalField>\r\n      <ng-container  [ngSwitch]="define.type">\r\n        <ng-template *ngIf="link;then linkBlock; else normalBlock"></ng-template>\r\n        <ng-template #linkBlock>\r\n          <a (click)="navigate($event)">\r\n            <div\r\n              [style]="{textAlign: alignByDataType ? \'center\' : null}"\r\n              *ngSwitchCase="TypeEnum.Time">{{ value? (value | date:dateFormat.Time): \'\'}}</div>\r\n            <div\r\n              [style]="{textAlign: alignByDataType ? \'center\' : null}"\r\n              *ngSwitchCase="TypeEnum.Date">{{ value? (value | date:dateFormat.Date): \'\'}}</div>\r\n            <div\r\n              [style]="{textAlign: alignByDataType ? \'center\' : null}"\r\n              *ngSwitchCase="TypeEnum.DateTime">{{ value? (value | date:dateFormat.DateTime:dateFormat.TimeZone ): \'\'}}</div>\r\n            <div\r\n              [style]="{textAlign: define.decimal!==null && alignByDataType ? \'right\' : null}"\r\n              *ngSwitchCase="define.type===TypeEnum.Float||define.type===TypeEnum.Int?define.type:null">{{ value!=null ? (value | numberFormat: define.decimal ): \'\'}}</div>\r\n            <span *ngSwitchDefault>{{ value }}</span>\r\n          </a>\r\n        </ng-template>\r\n        <ng-template #normalBlock>\r\n          <div *ngSwitchCase="TypeEnum.Time"\r\n               [style]="{textAlign: alignByDataType ? \'center\' : null}">{{value | date:dateFormat.Time}}</div>\r\n          <div *ngSwitchCase="TypeEnum.Date"\r\n               [style]="{textAlign: alignByDataType ? \'center\' : null}">{{value | date:dateFormat.Date}}</div>\r\n          <div *ngSwitchCase="TypeEnum.DateTime"\r\n               [style]="{textAlign: alignByDataType ? \'center\' : null}">{{value | date:dateFormat.DateTime:dateFormat.TimeZone}}</div>\r\n          <a (click)="download()" *ngSwitchCase="TypeEnum.File">\r\n            <ng-container *ngIf="!image;else second">\r\n              {{ value }}\r\n            </ng-container>\r\n            <ng-template #second>\r\n                <img [src]="image" alt="{{ value }}">\r\n            </ng-template>\r\n          </a>\r\n          <div *ngSwitchCase="TypeEnum.Boolean" [style]="{textAlign: alignByDataType ? \'center\' : null}">\r\n            <kendo-icon name="checkbox-checked" size="default" *ngIf="value"\r\n                            [style.color]="config.defaultCheckboxColor"\r\n                            style="{{config.checkboxStyle}}"></kendo-icon>\r\n            <kendo-icon name="checkbox" size="default" *ngIf="value === 0 || value === false"\r\n                            [style.color]="config.defaultCheckboxColor"\r\n                            style="{{config.checkboxStyle}}"></kendo-icon>\r\n            <kendo-icon name="tri-state-null" size="default" [style.color]="config.defaultCheckboxColor"\r\n                        style="{{config.checkboxStyle}}"\r\n                        *ngIf="value === null || value === undefined"></kendo-icon>\r\n          </div>\r\n          <div *ngSwitchCase="define.type===TypeEnum.Float||define.type===TypeEnum.Int?define.type:null"\r\n            [style]="{textAlign: define.decimal!==null && alignByDataType ? \'right\' : null}"\r\n          >{{ value | numberFormat: define.decimal }}</div>\r\n          <div\r\n            style="white-space: pre-wrap;overflow-y: auto"\r\n            [style.maxHeight]="define.height ? define.height+\'px\':null"\r\n            *ngSwitchCase="TypeEnum.Text">{{ value }}</div>\r\n          <span *ngSwitchDefault>{{ value }}</span>\r\n        </ng-template>\r\n      </ng-container>\r\n    </ng-template>\r\n  </ng-template>\r\n\r\n  <ng-template #editBlock>\r\n    <ng-container *ngIf="define.listValues && !define.choices;else autoCompleteField">\r\n      <kendo-combobox\r\n        [allowCustom]="false"\r\n        [attr.controls]="define.name"\r\n        [style.width]="width"\r\n\r\n        [data]="define.listKendoValues"\r\n                          [valuePrimitive]="true"\r\n                          textField="text"\r\n                          valueField="value"\r\n                          [(ngModel)]="value"\r\n                          (ngModelChange)="onChange($event)"\r\n\r\n          [style.borderBottom]="form.invalidInfo[record.serial] && form.invalidInfo[record.serial][define.name]?\'red 2px solid\':null"\r\n                          [title]="form.invalidInfo[record.serial] && form.invalidInfo[record.serial][define.name]? form.invalidInfo[record.serial][define.name]:\'\'"\r\n      ></kendo-combobox>\r\n    </ng-container>\r\n    \x3c!-- Combo box --\x3e\r\n    <ng-template #autoCompleteField>\r\n      <ng-container *ngIf="define.listName && !define.autocomplete && !define.choices;else autoCompleteTextField">\r\n        <ng-container *ngIf="!define.tree;else treeDropdownField">\r\n          <ng-container *ngIf="!define.listLong;else listLongField">\r\n\x3c!--            [virtual]="{itemHeight: 28}"--\x3e\r\n            <kendo-combobox\r\n              [attr.controls]="define.name"\r\n              [filterable]="true"\r\n              (filterChange)="handleFilter($event)"\r\n              [data]="data"\r\n              [suggest]="true"\r\n              [allowCustom]="false"\r\n              (focus)="onListFocus()"\r\n\r\n              [style.width]="width"\r\n              [valuePrimitive]="true"\r\n              textField="text"\r\n              valueField="value"\r\n              [(ngModel)]="value"\r\n              (ngModelChange)="onChange($event);"\r\n              [popupSettings]="{\r\n                            width: define.dropdownWidth\r\n                          }"\r\n              [style.borderBottom]="form.invalidInfo[record.serial] && form.invalidInfo[record.serial][define.name]?\'red 2px solid\':null"\r\n              [title]="form.invalidInfo[record.serial] && form.invalidInfo[record.serial][define.name]? form.invalidInfo[record.serial][define.name]:\'\'"\r\n            >\r\n              <ng-template kendoComboBoxItemTemplate let-dataItem>\r\n                {{ dataItem.text }}{{dataItem[\'extra1\']? \' | \' + dataItem[\'extra1\'] : \'\'}}\r\n              </ng-template>\r\n            </kendo-combobox>\r\n          </ng-container>\r\n          <ng-template #listLongField>\r\n            <gc-long-combobox\r\n              [attr.controls]="define.name"\r\n              [parent]="this"\r\n              [form]="form"\r\n              [define]="define"\r\n              [record]="record"\r\n              [(value)]="value"\r\n            ></gc-long-combobox>\r\n          </ng-template>\r\n        </ng-container>\r\n        <ng-template #treeDropdownField>\r\n          <kendo-dropdowntree\r\n            [attr.controls]="define.name"\r\n            [valuePrimitive]="true"\r\n            [dataItem]="dropdownTreeDataItem"\r\n            kendoDropDownTreeExpandable\r\n            [kendoDropDownTreeHierarchyBinding]="form.optionsMap[optionsKey]"\r\n            textField="text"\r\n            valueField="value"\r\n            childrenField="items"\r\n            [(value)]="value"\r\n            (focus)="onListFocus()"\r\n            (valueChange)="onChange($event)"\r\n\r\n          >\r\n          </kendo-dropdowntree>\r\n\x3c!--          <gc-tree-dropdown [items]="form.optionsMap[optionsKey]" [(value)]="value"--\x3e\r\n\x3c!--                            [attr.controls]="define.name"--\x3e\r\n\x3c!--                            (focus)="onListFocus()"--\x3e\r\n\x3c!--                            (selected)="onChange($event.value, $event.text)"--\x3e\r\n\x3c!--                            [style.borderBottom]="form.invalidInfo[record.serial] && form.invalidInfo[record.serial][define.name]?\'red 2px solid\':null"--\x3e\r\n\x3c!--                            [title]="form.invalidInfo[record.serial] && form.invalidInfo[record.serial][define.name]? form.invalidInfo[record.serial][define.name]:\'\'"--\x3e\r\n\x3c!--          ></gc-tree-dropdown>--\x3e\r\n        </ng-template>\r\n\r\n      </ng-container>\r\n    </ng-template>\r\n\r\n    \x3c!-- Auto complete --\x3e\r\n    <ng-template #autoCompleteTextField>\r\n      <ng-container *ngIf="define.listName && define.autocomplete;else checkField">\r\n        \x3c!--                            (input)="onAutocompleteInput($event)"--\x3e\r\n        <kendo-autocomplete [data]="autocompleteData"\r\n                            [attr.controls]="define.name"\r\n                            [filterable]="true"\r\n                            (filterChange)="handleAutocompleteFilter($event)"\r\n                            (input)="onAutocompleteInput($event)"\r\n                            [style.width]="width"\r\n                            [(ngModel)]="value"\r\n                            (ngModelChange)="onChange($event)"\r\n                            [style.borderBottom]="form.invalidInfo[record.serial] && form.invalidInfo[record.serial][define.name]?\'red 2px solid\':null"\r\n                            [title]="form.invalidInfo[record.serial] && form.invalidInfo[record.serial][define.name]? form.invalidInfo[record.serial][define.name]:\'\'"\r\n        >\r\n\r\n        </kendo-autocomplete>\r\n      </ng-container>\r\n    </ng-template>\r\n\r\n    \x3c!-- Choices --\x3e\r\n    <ng-template #checkField>\r\n      <ng-container *ngIf="define.choices;else normalField">\r\n        <gc-multi-select\r\n          [field]="define"\r\n          *ngIf="define.listName"\r\n\r\n          [radioMode]="multiSelectRadioMode"\r\n          [checkMode]="multiSelectCheckMode"\r\n          [cols]="multiSelectCols"\r\n          [showAll]="multiSelectShowAll"\r\n          [maxShownItems]="multiSelectMaxShownItems"\r\n          [maxShownItemLength]="multiSelectMaxShownItemLength"\r\n          [maxHeight]="multiSelectMaxHeight"\r\n          [labelPosition]="multiSelectLabelPosition"\r\n\r\n          [attr.controls]="define.name"\r\n          (detail)="detailMultiSelect.emit($event)"\r\n          [autocomplete]="define.autocompleteChoices"\r\n          [simpleMode]="define.simpleChoices"\r\n          (focus)="onListFocus()"\r\n          (valuesChange)="onChange($event)"\r\n          [listKendo]="form.optionsMap[optionsKey]" [(values)]="value"\r\n                       [style.borderBottom]="form.invalidInfo[record.serial] && form.invalidInfo[record.serial][define.name]?\'red 2px solid\':null"\r\n                       [title]="form.invalidInfo[record.serial] && form.invalidInfo[record.serial][define.name]? form.invalidInfo[record.serial][define.name]:\'\'"\r\n        ></gc-multi-select>\r\n\r\n        <gc-multi-select\r\n          [field]="define"\r\n          *ngIf="define.listValues"\r\n\r\n          [radioMode]="multiSelectRadioMode"\r\n          [checkMode]="multiSelectCheckMode"\r\n          [cols]="multiSelectCols"\r\n          [showAll]="multiSelectShowAll"\r\n          [maxShownItems]="multiSelectMaxShownItems"\r\n          [maxShownItemLength]="multiSelectMaxShownItemLength"\r\n          [maxHeight]="multiSelectMaxHeight"\r\n          [labelPosition]="multiSelectLabelPosition"\r\n\r\n          [attr.controls]="define.name"\r\n          (detail)="detailMultiSelect.emit($event)"\r\n          [simpleMode]="define.simpleChoices"\r\n          (valuesChange)="onChange($event)"\r\n          [listKendo]="define.listKendoValues"\r\n          [(values)]="value"\r\n          [style.borderBottom]="form.invalidInfo[record.serial] && form.invalidInfo[record.serial][define.name]?\'red 2px solid\':null"\r\n          [title]="form.invalidInfo[record.serial] && form.invalidInfo[record.serial][define.name]? form.invalidInfo[record.serial][define.name]:\'\'"\r\n        ></gc-multi-select>\r\n      </ng-container>\r\n    </ng-template>\r\n\r\n    <ng-template #normalField>\r\n      <ng-container  [ngSwitch]="define.type">\r\n        <div *ngSwitchCase="TypeEnum.Boolean" [style]="{textAlign: alignByDataType ? \'center\' : null}">\r\n          <input\r\n            [attr.controls]="define.name"\r\n            [indeterminate]="value === null"\r\n            (click)="checkboxClick($event)"\r\n            type="checkbox" id="terms" kendoCheckBox\r\n                 (ngModelChange)="onChange($event);"\r\n                 [(ngModel)]="value"/>\r\n        </div>\r\n\r\n\r\n        <kendo-numerictextbox\r\n          [spinners]="false"\r\n          [attr.controls]="define.name"\r\n          *ngSwitchCase="(define.type==TypeEnum.Float || define.type==TypeEnum.Int) ? define.type: -1"\r\n          name="{{define.name}}"\r\n          [format]="getNumberFormat()"\r\n\r\n          [(ngModel)]="value"\r\n          [style.width]="width"\r\n          [style.borderBottom]="form.invalidInfo[record.serial] && form.invalidInfo[record.serial][define.name]?\'red 2px solid\':null"\r\n          [title]="form.invalidInfo[record.serial] && form.invalidInfo[record.serial][define.name]? form.invalidInfo[record.serial][define.name]:\'\'"\r\n\r\n          (focus)="valueChanged=false"\r\n          (ngModelChange)="valueChanged=true"\r\n          (blur)="valueChanged ? onChange(value) : null"\r\n        >\r\n        </kendo-numerictextbox>\r\n        <kendo-timepicker\r\n          [attr.controls]="define.name"\r\n          *ngSwitchCase="TypeEnum.Time" name="{{define.name}}"\r\n          [(ngModel)]="value" format="{{dateFormat.Time}}"\r\n          [style.borderBottom]="form.invalidInfo[record.serial] && form.invalidInfo[record.serial][define.name]?\'red 2px solid\':null"\r\n          [title]="form.invalidInfo[record.serial] && form.invalidInfo[record.serial][define.name]? form.invalidInfo[record.serial][define.name]:\'\'"\r\n        ></kendo-timepicker>\r\n        <gc-date-picker\r\n          [attr.controls]="define.name"\r\n          *ngSwitchCase="TypeEnum.Date"\r\n          [(ngModel)]="value" name="{{define.name}}"\r\n          [styleBorderBottom]="form.invalidInfo[record.serial] && form.invalidInfo[record.serial][define.name]?\'red 2px solid\':null"\r\n          [title]="form.invalidInfo[record.serial] && form.invalidInfo[record.serial][define.name]? form.invalidInfo[record.serial][define.name]:\'\'"\r\n          (ngModelChange)="onChange($event)"\r\n        >\r\n        </gc-date-picker>\r\n        <gc-date-picker\r\n          [time]="true"\r\n          [attr.controls]="define.name"\r\n          *ngSwitchCase="TypeEnum.DateTime"\r\n          [(ngModel)]="value" name="{{define.name}}"\r\n          [style.borderBottom]="form.invalidInfo[record.serial] && form.invalidInfo[record.serial][define.name]?\'red 2px solid\':null"\r\n          [title]="form.invalidInfo[record.serial] && form.invalidInfo[record.serial][define.name]? form.invalidInfo[record.serial][define.name]:\'\'"\r\n          (ngModelChange)="onChange($event)"\r\n        >\r\n        </gc-date-picker>\r\n        <div *ngSwitchCase="TypeEnum.File" style="white-space: nowrap;">\r\n          <input type="file"\r\n                 [attr.controls]="define.name"\r\n                 (change)="onFileChange($event)" name="{{define.name}}"\r\n                 [style.borderBottom]="form.invalidInfo[record.serial] && form.invalidInfo[record.serial][define.name]?\'red 2px solid\':null"\r\n                 [title]="form.invalidInfo[record.serial] && form.invalidInfo[record.serial][define.name]? form.invalidInfo[record.serial][define.name]:\'\'"\r\n          />\r\n          <br>{{ lang.define.lib.uploadMaxFilesize }}: {{form.uploadMaxFilesize }}<br>\r\n          <ng-template [ngIf]="record[define.name]">\r\n            <button kendoButton icon="trash" (click)="deleteFile()"></button>\r\n          </ng-template>\r\n        </div>\r\n\r\n        <input type="password" name="{{define.name}}"\r\n               kendoTextBox\r\n               [attr.controls]="define.name"\r\n               *ngSwitchCase="TypeEnum.Password"\r\n               [(ngModel)]="value"\r\n               [style.borderBottom]="form.invalidInfo[record.serial] && form.invalidInfo[record.serial][define.name]?\'red 2px solid\':null"\r\n               [title]="form.invalidInfo[record.serial] && form.invalidInfo[record.serial][define.name]? form.invalidInfo[record.serial][define.name]:\'\'"\r\n               (focus)="valueChanged=false"\r\n               (ngModelChange)="valueChanged=true"\r\n               (blur)="valueChanged ? onChange(value) : null"\r\n        />\r\n        \x3c!-- Do not add min-width: 300px; to style, it cause display bug in grid form. --\x3e\r\n        <textarea name="{{define.name}}"\r\n                  [attr.controls]="define.name"\r\n                  kendoTextArea\r\n                  *ngSwitchCase="TypeEnum.Text"\r\n\r\n                  [(ngModel)]="value"\r\n                  style="width: 100%;"\r\n                  [style.height] = "(define.height? define.height : defaultTextAreaHeight) + \'px\'"\r\n                  [style.borderBottom]="form.invalidInfo[record.serial] && form.invalidInfo[record.serial][define.name]?\'red 2px solid\':null"\r\n                  [title]="form.invalidInfo[record.serial] && form.invalidInfo[record.serial][define.name]? form.invalidInfo[record.serial][define.name]:\'\'"\r\n        ></textarea>\r\n        <input type="text" name="{{define.name}}"\r\n               kendoTextBox\r\n               [attr.controls]="define.name"\r\n               *ngSwitchDefault\r\n               [(ngModel)]="value"\r\n               [style.borderBottom]="form.invalidInfo[record.serial] && form.invalidInfo[record.serial][define.name]?\'red 2px solid\':null"\r\n               [title]="form.invalidInfo[record.serial] && form.invalidInfo[record.serial][define.name]? form.invalidInfo[record.serial][define.name]:\'\'"\r\n               (focus)="valueChanged=false"\r\n               (ngModelChange)="valueChanged=true"\r\n               (blur)="valueChanged ? onChange(value) : null"\r\n\r\n        />\r\n      </ng-container>\r\n    </ng-template>\r\n  </ng-template>\r\n</ng-template>\r\n\r\n\r\n',styles:[".k-numeric-wrap>input{-ms-ime-mode:disabled;background-color:red}input[type=password],input[type=text]{width:100%}kendo-dropdownlist{width:100%}a{color:#00f;text-decoration:underline;cursor:pointer}"]}]}],Fe.ctorParameters=function(){return[{type:t.ComponentFactoryResolver},{type:fe},{type:ge},{type:me}]},Fe.propDecorators={record:[{type:t.Input}],apiUrl:[{type:t.Input}],value:[{type:t.Input}],multiSelectShowAll:[{type:t.Input}],multiSelectMaxShownItems:[{type:t.Input}],multiSelectMaxShownItemLength:[{type:t.Input}],multiSelectRadioMode:[{type:t.Input}],multiSelectCheckMode:[{type:t.Input}],multiSelectCols:[{type:t.Input}],multiSelectMaxHeight:[{type:t.Input}],multiSelectLabelPosition:[{type:t.Input}],alignByDataType:[{type:t.Input}],form:[{type:t.Input}],define:[{type:t.Input}],editable:[{type:t.Input}],link:[{type:t.Input}],thumbnail:[{type:t.Input}],width:[{type:t.Input}],changed:[{type:t.Output}],detailMultiSelect:[{type:t.Output}],valueChange:[{type:t.Output}],baseForm:[{type:t.Input}]};var Ee=function(){function e(){this.valueChange=new t.EventEmitter,this.data=[],this.filterValue=null,this.loading=!1}return Object.defineProperty(e.prototype,"record",{get:function(){return this.recordValue},set:function(e){this.recordValue=e,this.record["@"+this.define.name]&&this.data.indexOf(this.record["@"+this.define.name])<0&&this.data.push(this.record["@"+this.define.name])},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"value",{get:function(){return this.fieldValue},set:function(e){this.fieldValue=e,this.valueChange.emit(this.fieldValue)},enumerable:!1,configurable:!0}),e.prototype.ngOnInit=function(){var e=this;this.parent.getListValues(this.define,null,50,(function(t){e.record["@"+e.define.name]&&e.data.indexOf(e.record["@"+e.define.name])<0&&e.data.push(e.record["@"+e.define.name]),t&&(e.data=e.data.concat(pe.toKendoListValues(t))),e.form.optionsMap[e.define.listName]=e.data}))},e.prototype.handleFilter=function(e){this.filterValue=e,this.loading||this.load()},e.prototype.load=function(){var e=this;if(this.filterValue&&!this.loading){this.loading=!0;var t=this.filterValue;this.filterValue=null,this.loading=!0,this.parent.getListValues(this.define,t,50,(function(t){t&&(e.data=pe.toKendoListValues(t),e.form.optionsMap[e.define.listName]=e.data),e.loading=!1,e.load()}))}},e}();Ee.decorators=[{type:t.Component,args:[{selector:"gc-long-combobox",template:'<kendo-combobox\r\n  [filterable]="true"\r\n  (filterChange)="handleFilter($event)"\r\n  [data]="data"\r\n  [suggest]="true"\r\n  [allowCustom]="false"\r\n  style="width: 100%;"\r\n  [valuePrimitive]="true"\r\n  textField="text"\r\n  valueField="value"\r\n  [(ngModel)]="value"\r\n  (ngModelChange)="parent.onChange($event)"\r\n  [popupSettings]="{width: define.dropdownWidth}"\r\n  [style.borderBottom]="form.invalidInfo[record.serial] && form.invalidInfo[record.serial][define.name]?\'red 2px solid\':null"\r\n  [title]="form.invalidInfo[record.serial] && form.invalidInfo[record.serial][define.name]? form.invalidInfo[record.serial][define.name]:\'\'"\r\n>\r\n  <ng-template kendoComboBoxItemTemplate let-dataItem>\r\n    <ng-template [ngIf]="dataItem">\r\n      {{ dataItem.text }}{{dataItem[\'extra1\']? \' | \' + dataItem[\'extra1\'] : \'\'}}\r\n    </ng-template>\r\n  </ng-template>\r\n</kendo-combobox>\r\n',styles:[""]}]}],Ee.ctorParameters=function(){return[]},Ee.propDecorators={parent:[{type:t.Input}],define:[{type:t.Input}],form:[{type:t.Input}],record:[{type:t.Input}],value:[{type:t.Input}],valueChange:[{type:t.Output}]};var Te=function(){function e(e){this.api=e,this.data=[],this.autocompleteData=[],this.optionsKey=null,this.changed=new t.EventEmitter,this.detailMultiSelect=new t.EventEmitter,this.isLoading=!1,this.valueChange=new t.EventEmitter}return Object.defineProperty(e.prototype,"value",{get:function(){return this.fieldValue},set:function(e){this.fieldValue=e,this.valueChange.emit(this.fieldValue)},enumerable:!1,configurable:!0}),e.prototype.ngOnInit=function(){},e}();Te.decorators=[{type:t.Component,args:[{selector:"gc-base-list-field",template:"<p>base-list-field works!</p>\r\n",styles:[""]}]}],Te.ctorParameters=function(){return[{type:fe}]},Te.propDecorators={form:[{type:t.Input}],define:[{type:t.Input}],record:[{type:t.Input}],changed:[{type:t.Output}],detailMultiSelect:[{type:t.Output}],value:[{type:t.Input}],valueChange:[{type:t.Output}]};var De=function(){function n(n,i,r,a){var l=this;this.lang=i,this.dialog=r,this.api=a,this.FormTypeEnum=e.FieldType,this.initAlready=!1,this.hasChanged=!1,this.isFocused=!1,this.readonly=!1,this.autocomplete=!1,this.valuesValue=[],this.valuesChange=new t.EventEmitter,this.dropdownWidth=null,this.focus=new t.EventEmitter,this.listKendoInternal=[],this.maxRows=3,this.maxShownItemLength=30,this.simpleMode=!0,this.radioMode=!1,this.checkMode=!1,this.cols=2,this.maxHeight=300,this.labelPosition="right",this.showAll=!1,this.maxShownItems=3,this.detail=new t.EventEmitter,this.style=null,this.moreDialogOpened=!1,this.editDialogOpened=!1,this.srcData=[],this.desData=[],this.srcSelected=[],this.desSelected=[],this.filterValue=null,this.loading=!1,this.radioName=null,this.valueNormalizer=function(e){return e.pipe(d.map((function(e){var t=l.values.find((function(t){return t.toString().toLowerCase()===e.toLowerCase()}));if(t)return t;var n=l.listKendo.find((function(t){return t.text.toLowerCase()===e.toLowerCase()}));return n||{value:e,text:e}})))},this.style=n.nativeElement.getAttribute("style"),this.radioName="radio"+Math.random().toString(36).substring(2,15)+Math.random().toString(36).substring(2,15)}return Object.defineProperty(n.prototype,"values",{get:function(){return this.valuesValue},set:function(e){this.initAlready?e!==this.valuesValue&&(this.valuesValue=e,this.isFocused?this.hasChanged=!0:this.valuesChange.emit(this.valuesValue)):this.valuesValue=e},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"listKendo",{get:function(){return this.listKendoInternal},set:function(e){this.listKendoInternal=e,this.listKendoInternal&&(this.listData=this.listKendoInternal.slice()),this.prepare()},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"list",{get:function(){return this.listArrayItems},set:function(e){this.listArrayItems=e,e&&(this.listKendo=pe.toKendoListValues(e,"multi-select"))},enumerable:!1,configurable:!0}),n.prototype.ngOnInit=function(){this.listKendo?this.listData=this.listKendo.slice():this.load(),this.initAlready=!0},n.prototype.isCheck=function(e){return this.values&&this.values.includes(e)},n.prototype.findText=function(e){if(this.listKendo){var t=this.listKendo.findIndex((function(t){return t.value===e}));if(t>-1)return this.listKendo[t].text}return e?e.toString():null},n.prototype.reduceText=function(e,t){return void 0===t&&(t=20),e?"string"==typeof e||e instanceof String?e.length<=t?e.toString():e.substr(0,t)+" ...":e.toString():null},n.prototype.prepare=function(){var e=this;if(!this.simpleMode){var t=[],n=[];this.srcSelected=[],this.desSelected=[],this.listKendo&&this.listKendo.forEach((function(i){e.isCheck(i.value)?n.push(i):t.push(i)})),this.srcData=t,this.desData=n}},n.prototype.selectAll=function(e,t){e.forEach((function(e){t.push(e)})),e.splice(0,e.length),this.desSelected=[],this.srcSelected=[]},n.prototype.select=function(e,t,n){if(e&&!(e.length<1)){var i=[];t.forEach((function(t){e.includes(t.value)?n.push(t):i.push(t)})),t.splice(0,t.length),i.forEach((function(e){t.push(e)})),this.desSelected=[],this.srcSelected=[]}},n.prototype.apply=function(){var e=[];this.desData.forEach((function(t){e.push(t.value)})),this.values=e,this.valuesChange.emit(this.values)},n.prototype.filterChange=function(e){if(this.field&&this.field.listLong){if(this.filterValue=e,this.loading)return;this.load()}else{this.listData=this.listKendo.filter((t=e,function(e){if(!e.text)return!1;var n=-1!==e.text.toLowerCase().indexOf(t.toLowerCase());return!n&&e.extra1&&(n=-1!==e.extra1.toLowerCase().indexOf(t.toLowerCase())),n}))}var t},n.prototype.load=function(){var e=this;if(this.filterValue&&!this.loading){this.loading=!0;var t=this.filterValue;this.filterValue=null;var n=Date.now()/1e3;console.log(n+" start handleFilter:"+t),this.loading=!0,this.getListValues(this.field,t,50,(function(i){if(i){n=Date.now()/1e3;var r=[];e.values.forEach((function(t){var n=e.listData.findIndex((function(e){return e.value===t}));n>=0&&r.push(e.listData[n])})),r=r.concat(pe.toKendoListValues(i)),console.log(n+" end handleFilter:"+t),e.listData=r,e.form&&(e.form.optionsMap[e.field.listName]=r)}e.loading=!1,e.load()}))}},n.prototype.getListValues=function(e,t,n,i){this.api.getListValues(e.listName,e.listFixParam,null,t,n,(function(e){i(e)}))},n.prototype.showDetail=function(e){var t=this;this.readonly?this.dialog.open({title:this.lang.define.lib.view,content:e,actions:[{text:this.lang.define.lib.close,primary:!0}]}):(this.onInputFocus(),this.prepare(),this.dialog.open({title:this.lang.define.lib.edit,content:e,actions:[{text:this.lang.define.lib.cancel},{text:this.lang.define.lib.apply,primary:!0}]}).result.subscribe((function(e){e instanceof u.DialogCloseResult||!e.primary||t.apply()})))},n.prototype.onInputFocus=function(){this.isFocused=!0,this.hasChanged=!1,this.focus.emit()},n.prototype.onInputBlur=function(){this.isFocused=!1,this.hasChanged&&this.valuesChange.emit(this.valuesValue),this.hasChanged=!1},n.prototype.refreshGrid=function(e,t){[[this.srcData,e],[this.desData,t]].forEach((function(e){var t=e[0],n=e[1];t.length>n.skip?n.pageChange.emit({take:n.pageSize,skip:n.skip}):n.skip>n.pageSize?n.pageChange.emit({take:n.pageSize,skip:n.skip-n.pageSize}):n.pageChange.emit({take:n.pageSize,skip:0})}))},n}();De.decorators=[{type:t.Component,args:[{selector:"gc-multi-select",template:'<ng-container *ngIf="readonly;else editable">\r\n  <ng-container *ngTemplateOutlet="readonlyPane"></ng-container>\r\n</ng-container>\r\n\x3c!--Editable--\x3e\r\n<ng-template #editable>\r\n  <ng-template [ngIf]="checkMode || radioMode">\r\n    <gc-all-select\r\n      [radio]="radioMode"\r\n      [numberValue]="field && (!field.listStringValue || field.type === FormTypeEnum.Int || field.type === FormTypeEnum.Float)"\r\n      [config]="listData" [(values)]="values"\r\n      [cols]="cols" [labelPosition]="labelPosition" [maxHeight]="maxHeight">\r\n    </gc-all-select>\r\n  </ng-template>\r\n  <ng-container *ngIf="simpleMode && !checkMode && !radioMode;">\r\n    \x3c!--[virtual]="{itemHeight: 28}"--\x3e\r\n    <kendo-multiselect\r\n      [data]="listData"\r\n      [(ngModel)]="values"\r\n      [textField]="\'text\'"\r\n      [valueField]="\'value\'"\r\n      [allowCustom]="autocomplete"\r\n      [valuePrimitive]="true"\r\n      [filterable]="true"\r\n      [valueNormalizer]="valueNormalizer"\r\n      (filterChange)="filterChange($event)"\r\n\r\n      (focus)="onInputFocus()"\r\n      (blur)="onInputBlur()"\r\n      [popupSettings]="{\r\n        width: dropdownWidth\r\n      }"\r\n      style="{{style}}"\r\n    >\r\n\x3c!--      (valueChange)="valuesChange.emit(values)"--\x3e\r\n      <ng-template kendoComboBoxItemTemplate let-dataItem>\r\n        {{ dataItem.text }} {{ dataItem[\'extra1\'] }}\r\n      </ng-template>\r\n    </kendo-multiselect>\r\n  </ng-container>\r\n  <ng-template [ngIf]="!simpleMode && !checkMode && !radioMode">\r\n    <ng-container *ngTemplateOutlet="readonlyPane"></ng-container>\r\n  </ng-template>\r\n</ng-template>\r\n\r\n\x3c!--Dialog--\x3e\r\n<ng-template #dialogContent>\r\n  <kendo-grid [data]="values" [height]="450" style="width: 300px;" *ngIf="readonly">\r\n    <kendo-grid-column title="{{ lang.define.lib.selected }}">\r\n      <ng-template kendoGridCellTemplate let-value>\r\n        {{ findText(value) }}\r\n      </ng-template>\r\n    </kendo-grid-column>\r\n  </kendo-grid>\r\n\r\n  <div class="row" *ngIf="!readonly" style="width: 1000px;">\r\n    <div style="vertical-align: top;" class="col col-md-5">\r\n      <kendo-grid [kendoGridBinding]="srcData" [height]="450"\r\n\r\n                  [selectable]="{mode: \'multiple\', checkboxOnly: true}"\r\n                  [navigable]="true"\r\n                  filterable="menu"\r\n                  kendoGridSelectBy="value"\r\n                  [(selectedKeys)]="srcSelected"\r\n                  [pageSize]="30"\r\n                  [pageable]="{buttonCount: 5, info: false}"\r\n                  #gridSrc\r\n      >\r\n        <kendo-grid-checkbox-column [showSelectAll]="true" [width]="40" [style]="{textAlign: \'center\'}"\r\n                                    [headerStyle]="{lineHeight: \'30px\'}">\r\n\r\n        </kendo-grid-checkbox-column>\r\n        <kendo-grid-column field="text" title="{{ lang.define.lib.unselected }}">\r\n          <ng-template kendoGridCellTemplate let-item>\r\n            {{ item.text }}\r\n          </ng-template>\r\n        </kendo-grid-column>\r\n      </kendo-grid>\r\n    </div>\r\n    <div style="vertical-align: top;"  class="col-md-2">\r\n      <button kendoButton style="width: 100%;"\r\n              icon="arrow-60-right"\r\n              [primary]="true" (click)="select(srcSelected, srcData, desData);refreshGrid(gridSrc, gridDes)">\r\n        {{ lang.define.lib.select }}\r\n      </button>\r\n      <br><br>\r\n      <button kendoButton style="width: 100%"\r\n              icon="arrow-double-60-right"\r\n              [primary]="true" (click)="selectAll(srcData, desData);refreshGrid(gridSrc, gridDes)">\r\n        {{ lang.define.lib.selectAll }}\r\n      </button>\r\n      <br><br>\r\n      <button kendoButton style="width: 100%"\r\n              icon="arrow-60-left"\r\n              (click)="select(desSelected, desData, srcData);refreshGrid(gridSrc, gridDes)">\r\n        {{ lang.define.lib.deselect }}\r\n      </button>\r\n      <br><br>\r\n      <button kendoButton style="width: 100%"\r\n              icon="arrow-double-60-left"\r\n              (click)="selectAll(desData, srcData);refreshGrid(gridSrc, gridDes)">\r\n        {{ lang.define.lib.deselectAll }}\r\n      </button>\r\n    </div>\r\n    <div style="vertical-align: top;"  class="col col-md-5">\r\n      <kendo-grid [kendoGridBinding]="desData" [height]="450"\r\n                  [selectable]="{mode: \'multiple\', checkboxOnly: true}"\r\n                  [navigable]="true"\r\n                  filterable="menu"\r\n                  kendoGridSelectBy="value"\r\n                  [(selectedKeys)]="desSelected"\r\n                  [pageSize]="30"\r\n                  [pageable]="{buttonCount: 5, info: false}"\r\n                  #gridDes\r\n      >\r\n        <kendo-grid-checkbox-column [showSelectAll]="true" [width]="40"\r\n                                    [headerStyle]="{lineHeight: \'30px\'}"\r\n                                    [style]="{textAlign: \'center\'}"></kendo-grid-checkbox-column>\r\n        <kendo-grid-column field="text" title="{{ lang.define.lib.selected }}">\r\n          <ng-template kendoGridCellTemplate let-item>\r\n            {{ item.text }}\r\n          </ng-template>\r\n        </kendo-grid-column>\r\n      </kendo-grid>\r\n    </div>\r\n\r\n  </div>\r\n\x3c!--  <button kendoButton (click)="editDialogOpened=false;apply();">{{ lang.define.lib.apply }}</button>&nbsp;--\x3e\r\n\x3c!--  <button kendoButton (click)="editDialogOpened=false;">{{ lang.define.lib.cancel }}</button>--\x3e\r\n</ng-template>\r\n\r\n\x3c!--Read only--\x3e\r\n<ng-template #readonlyPane>\r\n  <div style="position: relative;overflow-y: auto;"\r\n       [style.background-color]="!readonly? \'white\': null"\r\n       [style.border]="!readonly? \'1px solid gray\' : null"\r\n       [style.padding]="!readonly? \'4px 4px 4px 4px\' : null"\r\n       *ngIf="(values && values.length>0) || !readonly">\r\n    <div style="position: relative; padding-right: 35px;overflow-y: auto;overflow-x: hidden" [style.max-height] = "maxHeight + \'px\'">\r\n      <ng-container *ngFor="let value of values;let i= index">\r\n        <gc-chip  *ngIf="i < maxShownItems || showAll" [color]="field.listColors && field.listColors[value] ? field.listColors[value]: null">\r\n          {{reduceText(findText(value), maxShownItemLength)}}\r\n        </gc-chip>\r\n      </ng-container>\r\n      <gc-chip  *ngIf="!readonly && !showAll && values && values.length > maxShownItems" color="transparent" [border]="0">\r\n        <b>...</b>\r\n      </gc-chip>\r\n      <gc-chip  *ngIf="!values || values.length <= 0" color="transparent" [border]="0">\r\n        &nbsp;\r\n      </gc-chip>\r\n\r\n\r\n    </div>\r\n\r\n    <div style="position: absolute; top:2px; right: 2px" *ngIf="!readonly || (!showAll && values && values.length > maxShownItems)">\r\n      <button kendoButton [icon]="readonly? \'more-horizontal\' : \'edit\'"\r\n              [primary]="false"\r\n              (click)="showDetail(dialogContent)"\r\n               [look]="readonly? \'flat\': \'default\'"\r\n      ></button>\r\n    </div>\r\n  </div>\r\n</ng-template>\r\n\r\n',styles:[".k-chip{margin:1px}"]}]}],De.ctorParameters=function(){return[{type:t.ElementRef},{type:me},{type:u.DialogService},{type:fe}]},De.propDecorators={readonly:[{type:t.Input}],field:[{type:t.Input}],form:[{type:t.Input}],autocomplete:[{type:t.Input}],values:[{type:t.Input}],valuesChange:[{type:t.Output}],dropdownWidth:[{type:t.Input}],focus:[{type:t.Output}],listKendo:[{type:t.Input}],list:[{type:t.Input}],maxRows:[{type:t.Input}],maxShownItemLength:[{type:t.Input}],simpleMode:[{type:t.Input}],radioMode:[{type:t.Input}],checkMode:[{type:t.Input}],cols:[{type:t.Input}],maxHeight:[{type:t.Input}],labelPosition:[{type:t.Input}],showAll:[{type:t.Input}],maxShownItems:[{type:t.Input}],detail:[{type:t.Output}]};var Me=function(){function e(e){this.lang=e}return e.prototype.ngOnInit=function(){},e}();Me.decorators=[{type:t.Component,args:[{selector:"gc-multi-select-detail",template:'\x3c!--More--\x3e\r\n<kendo-dialog\r\n  title="{{ lang.define.lib.view }} hello" *ngIf="parent && parent.moreDialogOpened" (close)="parent.moreDialogOpened=false"\r\n  [minWidth]="250" [width]="450">\r\n  <kendo-grid [data]="parent.values" [height]="450">\r\n    <kendo-grid-column title="{{ lang.define.lib.selected }}">\r\n      <ng-template kendoGridCellTemplate let-value>\r\n        {{ parent.findText(value) }}\r\n      </ng-template>\r\n    </kendo-grid-column>\r\n  </kendo-grid>\r\n</kendo-dialog>\r\n\r\n\x3c!--Edit--\x3e\r\n<kendo-dialog title="{{ lang.define.lib.edit }}" *ngIf="parent && parent.editDialogOpened"\r\n            (close)="parent.editDialogOpened=false"\r\n              [minWidth]="300" [width]="1000">\r\n  <div class="row">\r\n    <div style="vertical-align: top;" class="col col-md-5">\r\n      <kendo-grid [kendoGridBinding]="parent.srcData" [height]="450"\r\n                  [selectable]="{mode: \'multiple\'}" [navigable]="true"\r\n                  filterable="menu"\r\n                  kendoGridSelectBy="value"\r\n                  [(selectedKeys)]="parent.srcSelected"\r\n                  [pageSize]="20"\r\n                  [pageable]="{buttonCount: 5, info: false}"\r\n      >\r\n        <kendo-grid-checkbox-column [showSelectAll]="true" [width]="40"></kendo-grid-checkbox-column>\r\n        <kendo-grid-column field="text" title="{{ lang.define.lib.unselected }}">\r\n          <ng-template kendoGridCellTemplate let-item>\r\n            {{ item.text }}\r\n          </ng-template>\r\n        </kendo-grid-column>\r\n      </kendo-grid>\r\n    </div>\r\n    <div style="vertical-align: top; align-content: flex-end;"  class="col col-md-2">\r\n      Hello\r\n      <button kendoButton style="width: 100px;"\r\n              icon="arrow-60-right"\r\n              [primary]="true" (click)="parent.select(parent.srcSelected, parent.srcData, parent.desData);parent.srcData=[]">\r\n        {{ lang.define.lib.select }}\r\n      </button>\r\n      <br><br>\r\n      <button kendoButton style="width: 100px"\r\n              icon="arrow-double-60-right"\r\n              [primary]="true" (click)="parent.selectAll(parent.srcData, parent.desData)">\r\n        {{ lang.define.lib.selectAll }}\r\n      </button>\r\n      <br><br>\r\n      <button kendoButton style="width: 100px"\r\n              icon="arrow-60-left"\r\n              (click)="parent.select(parent.desSelected, parent.desData, parent.srcData)">\r\n        {{ lang.define.lib.deselect }}\r\n      </button>\r\n      <br><br>\r\n      <button kendoButton style="width: 100px"\r\n              icon="arrow-double-60-left"\r\n              (click)="parent.selectAll(parent.desData, parent.srcData)">\r\n        {{ lang.define.lib.deselectAll }}\r\n      </button>\r\n    </div>\r\n    <div style="vertical-align: top;"  class="col col-md-5">\r\n      <kendo-grid [kendoGridBinding]="parent.desData" [height]="450"\r\n                  [selectable]="{mode: \'multiple\'}" [navigable]="true"\r\n                  filterable="menu"\r\n                  kendoGridSelectBy="value"\r\n                  [(selectedKeys)]="parent.desSelected"\r\n      >\r\n        <kendo-grid-checkbox-column [showSelectAll]="true" [width]="40"></kendo-grid-checkbox-column>\r\n        <kendo-grid-column field="text" title="{{ lang.define.lib.selected }}">\r\n          <ng-template kendoGridCellTemplate let-item>\r\n            {{ item.text }}\r\n          </ng-template>\r\n        </kendo-grid-column>\r\n      </kendo-grid>\r\n    </div>\r\n\r\n  </div>\r\n  <kendo-dialog-actions>\r\n    <button kendoButton (click)="parent.editDialogOpened=false;parent.apply();">{{ lang.define.lib.apply }}</button>\r\n    <button kendoButton (click)="parent.editDialogOpened=false;">{{ lang.define.lib.cancel }}</button>\r\n  </kendo-dialog-actions>\r\n</kendo-dialog>\r\n',styles:[""]}]}],Me.ctorParameters=function(){return[{type:me}]},Me.propDecorators={parent:[{type:t.Input}]};var Pe=function(){function n(n,i,r,a,l){this.lang=n,this.api=i,this.message=r,this.el=a,this.datePipe=l,this.changeToViewAfterUpdate=!0,this.priorInlineUpdate=!1,this.buttonOnTop=ue.defaultGridButtonOnTop,this.loading=!1,this.status=e.FormStatus.View,this.editCache={},this.extra=null,this.formHeight=0,this.inDialog=!1,this.firstErrorItemName=null,this.auto=!0,this.showFooterBar=!0,this.showButtons=!0,this.showBackButton=!1,this.params={},this.height=null,this.heightMargin=0,this.bottomDistance=46,this.alignByDataType=!0,this.defineWithData=ue.defaultDefineWithData,this.userFields={},this.loaded=new t.EventEmitter,this.defined=new t.EventEmitter,this.saveError=new t.EventEmitter,this.updated=new t.EventEmitter,this.inserted=new t.EventEmitter,this.deleted=new t.EventEmitter,this.listed=new t.EventEmitter,this.beforeInsert=null,this.beforeUpdate=null,this.beforeDelete=null,this.fieldVisibleCondition=null,this.defineLoaded=function(){},this.dataLoaded=function(){},this.dataDeleted=function(e){},this.dataUpdated=function(e){},this.dataInserted=function(e){}}return Object.defineProperty(n.prototype,"apiUrl",{get:function(){return this.myApiUrl},set:function(e){this.myApiUrl=e,this.init()},enumerable:!1,configurable:!0}),n.parseJsonString=function(e){try{return JSON.parse(e)}catch(e){return null}},n.prototype.init=function(){},n.prototype.clearListCache=function(){this.define&&(this.define.optionsMap={})},n.prototype.loadWithData=function(t){var n=this;this.data=t.data,this.define.total=t.total,this.define.summaries=t.summary,this.extra=t.extra,this.extra&&this.extra.debug&&(this.extra.debug.time&&console.log(this.extra.debug.time),this.extra.debug.query&&console.log(this.extra.debug.query)),t.list?this.define.optionsMap&&Object.keys(this.define.optionsMap).length>0?Object.keys(t.list).forEach((function(e){n.define.optionsMap[e]=t.list[e].slice()})):this.define.optionsMap=t.list:this.define.optionsMap={};var i=1;this.data.forEach((function(t){t.serial=i,i++,n.define.fields.forEach((function(n){t[n.name]&&(n.type===e.FieldType.Date||n.type===e.FieldType.DateTime||n.type===e.FieldType.Time?t[n.name]=pe.toDatetime(t[n.name]):n.type!==e.FieldType.Int&&n.type!==e.FieldType.Float||n.autocomplete||n.choices||(t[n.name]=+t[n.name]))}))}))},n.prototype.load=function(e,t){var n=this;void 0===e&&(e=null),void 0===t&&(t=null),this.loading=!0,this.define&&(t||(t=this.params),this.api.data(this.apiUrl,this.define,t,(function(t,i,r){if(n.loading=!1,200!==t)return n.data=[],e&&e(),void n.error(i);n.loadWithData(r),e&&e()})))},n.prototype.loadFieldGroups=function(e){void 0===e&&(e=null);var t=[];if(!this.define&&!this.define.fields)return t;var n={field:null,fields:[],groupName:null},i=null;return this.define.fields.forEach((function(r){r.groupFirstItem=!1,r.groupFirstEditItem=!1,e&&(r.groupName||(r.groupName=e)),r.groupName?(r.editable&&(i&&i===r.groupName||(r.groupFirstEditItem=!0,i=r.groupName)),n.groupName?n.groupName!==r.groupName&&(r.groupFirstItem=!0,n={field:null,fields:[],groupName:r.groupName},t.push(n)):(r.groupFirstItem=!0,n.groupName=r.groupName,t.push(n)),n.fields.push(r)):(n={field:null,fields:[],groupName:null},t.push({field:r,fields:[r],groupName:null}))})),this.define.fieldGroups=t,t},n.prototype.updateEditCache=function(e){var t=this;void 0===e&&(e=!1),this.editCache={},this.data.forEach((function(n){n.serial&&(t.editCache[n.serial]={edit:e,delete:!1,data:pe.objectAssign({},n)})}))},n.prototype.countEditCache=function(e){var t=this;void 0===e&&(e=!1);var n=0;return this.data.forEach((function(i){i.serial&&(t.editCache[i.serial].delete&&e||t.editCache[i.serial].edit&&!e)&&(n+=1)})),n},n.prototype.clearEditCache=function(e){var t=this;void 0===e&&(e=!1),e?this.data.forEach((function(e){e.serial&&t.editCache[e.serial].delete&&(t.editCache[e.serial].delete=!1)})):this.data.forEach((function(e){e.serial&&t.editCache[e.serial].edit&&(t.editCache[e.serial].edit=!1)}))},n.prototype.loadUserFields=function(){var e=this;this.userFieldDirectives&&this.userFieldDirectives.forEach((function(t){e.userFields[t.name]=t}))},n.prototype.isInsert=function(e){return!(!e||0===e.length)&&e[0].new},n.prototype.getSelectedData=function(e,t){var n=this;void 0===t&&(t=!1);var i=[];if(null!=e){var r=this.data.findIndex((function(t){return t.serial===e}));i.push(this.data[r])}else this.data.forEach((function(e){if(n.editCache[e.serial].edit&&!t||n.editCache[e.serial].delete&&t){var r=n.data.findIndex((function(t){return t.serial===e.serial}));i.push(n.data[r])}}));return i},n.prototype.clearValidate=function(){this.define&&(this.define.invalidInfo={})},n.prototype.getFieldByRequiredGroup=function(e){var t=[];return this.define.fields.forEach((function(n){n.requiredGroup===e&&t.push(n)})),t},n.prototype.checkRequiredGroup=function(e,t){var n=this.getFieldByRequiredGroup(t);if(0===n.length)return null;var i=[],r=!1;return n.forEach((function(t){""===e[t.name]||void 0===e[t.name]||null===e[t.name]?i.push(t.caption):r=!0})),r?null:i.join(" or ")},n.prototype.validate=function(t){var n=this;this.clearValidate();var i=!0,r=null,a=[];return t.forEach((function(t){var l={};n.define.fields.forEach((function(i){if(i.editable){var o=i.hidden||n.fieldVisibleCondition&&!n.fieldVisibleCondition(i.name,t),s=[];if(i.required&&!o)if(i.type===e.FieldType.File){var d=pe.fileFieldName(i.name),c=t[d];if(!c&&!t[i.name]||"__delete__"===c){var u=f.sprintf(n.lang.define.lib.requiredMessage,i.caption);l[i.name]=u,r||(r=i.name),a.indexOf(u)<0&&a.push(u)}}else if(i.required&&(""===t[i.name]||void 0===t[i.name]||null===t[i.name])){u=null;if(i.requiredGroup){if(!s.includes(i.requiredGroup)){s.push(i.requiredGroup);var p=n.checkRequiredGroup(t,i.requiredGroup);p&&(u=f.sprintf(n.lang.define.lib.requiredMessage,p))}}else u=f.sprintf(n.lang.define.lib.requiredMessage,i.caption);u&&(l[i.name]=u,a.indexOf(u)<0&&a.push(u),r||(r=i.name))}if((null!==i.min||null!==i.max)&&(null!==i.min&&null!==t[i.name]&&t[i.name]<i.min||null!==i.max&&null!==t[i.name]&&t[i.name]>i.max)){u=void 0;null!==i.max&&null!==i.min?u=f.sprintf(n.lang.define.lib.maxMinMessage,i.caption,i.min.toLocaleString(),i.max.toLocaleString()):null!==i.max?u=f.sprintf(n.lang.define.lib.maxMessage,i.caption,i.max.toLocaleString()):null!==i.min&&(u=f.sprintf(n.lang.define.lib.minMessage,i.caption,i.min.toLocaleString())),l[i.name]=u,r||(r=i.name),a.indexOf(u)<0&&a.push(u)}if((null!==i.lengthMin||null!==i.lengthMax)&&(null!==i.lengthMin&&null!==t[i.name]&&t[i.name].length<i.lengthMin||null!==i.lengthMax&&null!==t[i.name]&&t[i.name].length>i.lengthMax)){u=void 0;null!==i.lengthMax&&null!==i.lengthMin?u=i.lengthMax===i.lengthMin?f.sprintf(n.lang.define.lib.equalLengthMessage,i.caption,i.lengthMin.toLocaleString()):f.sprintf(n.lang.define.lib.maxMinLengthMessage,i.caption,i.lengthMin.toLocaleString(),i.lengthMax.toLocaleString()):null!==i.lengthMax?u=f.sprintf(n.lang.define.lib.maxLengthMessage,i.caption,i.lengthMax.toLocaleString()):null!==i.lengthMin&&(u=f.sprintf(n.lang.define.lib.minLengthMessage,i.caption,i.lengthMin.toLocaleString())),l[i.name]=u,r||(r=i.name),a.indexOf(u)<0&&a.push(u)}n.validators&&n.validators[i.name]&&n.validators[i.name].forEach((function(e){var n=e(t);null!=n&&(l[i.name]=n,r||(r=i.name),a.indexOf(n)<0&&a.push(n))}))}})),0!==Object.keys(l).length&&(i=!1,n.define.invalidInfo[t.serial]=l)})),this.firstErrorItemName=r,i||(alert(a.join("\n")),this.focusErrorControl()),i},n.prototype.save=function(t,i){var r=this,a=this.getSelectedData(t);if(this.validate(a)){var l=this.data.findIndex((function(e){return e.serial===t}));this.loading=!0,this.api.update(this.apiUrl,this.define,this.params,a,(function(o,s,d){r.loading=!1;var c=r.isInsert(a);if(o===e.ServiceCode.Success){var u=[];r.define.fields.forEach((function(e){e.key&&u.push(e.name)})),d.forEach((function(t){var n=r.data.findIndex((function(e){return e.serial===t[ee]}));n>=0&&(u.forEach((function(e){r.data[n][e]=t[e],r.data[n]["#"+e]=t[e]})),r.data[n].new=!1),r.define.fields.forEach((function(i){if(i.type===e.FieldType.File)t[i.name]&&(r.data[n][i.name]=t[i.name]);else if(i.choices&&i.autocompleteChoices)r.data[n][i.name]=t[i.name],Object.keys(r.define.optionsMap).forEach((function(e){e===i.listName?r.api.getListValues(e,i.listFixParam,null,null,null,(function(t){r.define.optionsMap[e]=pe.toKendoListValues(t)})):e.startsWith(i.listName)&&(r.define.optionsMap[e]=null)}));else{r.data[n][i.name]=t[i.name],i.type===e.FieldType.Date||i.type===e.FieldType.DateTime||i.type===e.FieldType.Time?r.data[n][i.name]=pe.toDatetime(r.data[n][i.name]):i.type!==e.FieldType.Int&&i.type!==e.FieldType.Float||i.autocomplete||i.choices||(null!=r.data[n][i.name]?r.data[n][i.name]=+r.data[n][i.name]:r.data[n][i.name]=null);var a="@"+i.name;t[a]&&(r.data[n][a]=t[a])}}))})),r.info(r.lang.define.lib.updatedMessage);var p=!1,f=e.FormStatus.View;if(r.changeToViewAfterUpdate||(p=!0,f=r.status),null==t?(r.updateEditCache(p),r.status=f):(r.editCache[t]={edit:p,delete:!1,data:pe.objectAssign({},r.data[l])},0===r.countEditCache()&&(r.status=f)),i){var h=d.length;i(e.ServiceCode.Success,r.lang.define.lib.updatedMessage+" ("+h+")")}c?(d.length&&(r.define.total+=d.length),r.dataInserted(d),r.inserted.emit(d)):(r.dataUpdated(d),r.updated.emit(d))}else{var m=n.parseJsonString(s);m?(alert(m.message),m.fields&&m.fields.length>0&&r.focusControl(m.fields[0])):alert(s),i&&i(o,s),r.saveError&&r.saveError.emit(m)}}))}else i&&i(e.ServiceCode.ValidateError,null)},n.prototype.action=function(e,t,n){void 0===n&&(n=null),this.api.action(this.apiUrl,e,this.define,this.params,t,(function(e,t,i){n&&n(e,t,i)}))},n.prototype.initDefaultValue=function(e){this.define.fields.forEach((function(t){void 0===e[t.name]&&(e[t.name]=null,t.defaultValue&&(e[t.name]=t.defaultValue))}))},n.prototype.delete=function(t,n){var i=this,r=this.getSelectedData(t,!0);this.loading=!0,this.api.delete(this.apiUrl,this.define,this.params,r,(function(t,a,l){i.loading=!1,t===e.ServiceCode.Success?(r.forEach((function(e){i.data=i.data.filter((function(t){return t.serial!==e.serial}))})),i.info(i.lang.define.lib.deletedMessage),i.clearEditCache(),n&&n(e.ServiceCode.Success,i.lang.define.lib.deletedMessage+" ("+l+")"),i.dataDeleted(l),i.deleted.emit(l)):(i.error(a),n&&n(t,a))}))},n.prototype.editable=function(){return this.status!==e.FormStatus.View},n.prototype.serial=function(){var e=0;return this.data.forEach((function(t){e<t.serial&&(e=t.serial)})),e},n.prototype.info=function(e){this.message.success(e)},n.prototype.warning=function(e,t){void 0===t&&(t=!1),this.message.warning(e,4e3,t)},n.prototype.error=function(e,t){void 0===t&&(t=800),this.message.error(e,t)},n.prototype.clearFileInput=function(t){var n=this,i=this.data.findIndex((function(e){return e.serial===t}));this.define.fields.forEach((function(t){t.type===e.FieldType.File&&delete n.data[i][pe.fileFieldName(t.name)]}))},n.prototype.isVisible=function(){var e=this.el.nativeElement.getBoundingClientRect();return 0!==e.x||0!==e.y},n.prototype.initFormHeight=function(){if(this.height){if(Number.isInteger(this.height))this.formHeight=this.height;else try{var e=parseFloat(this.height);isNaN(e)?this.formHeight=80*(window.innerHeight-100)/100:this.height.includes("%")?this.formHeight=e>100?e:(window.innerHeight-this.heightMargin)*e/100:this.formHeight=e}catch(e){}return!0}return!1},n.prototype.resize=function(){if(this.define&&this.isVisible()&&!this.initFormHeight())if(this.bottomDistance){var e=this.el.nativeElement.parentElement;e&&e.className&&(this.inDialog=e.className.includes("k-dialog-content"));var t,n=this.el.nativeElement.getBoundingClientRect().y;if(this.inDialog){var i=n-e.getBoundingClientRect().y;t=window.innerHeight-i-2*this.bottomDistance}else n<0&&(n=100),t=window.innerHeight-n-this.bottomDistance;this.buttonOnTop&&(t-=30),this.formHeight=t>200?t:200}else this.formHeight=null},n.prototype.copyEditModelFieldEditCache=function(e,t){var n=this;void 0===t&&(t=-1),-1===t&&(t=this.data.findIndex((function(t){return t.serial===e}))),t<0||this.define.fields.forEach((function(i){i.editMode&&(n.editCache[e].data[i.name]=n.data[t][i.name])}))},n.prototype.toServerFormat=function(t){var n=this,i=[];return t.forEach((function(t){var r={};n.define.fields.forEach((function(i){void 0===t[i.name]||null===t[i.name]?r[i.name]=null:i.type===e.FieldType.DateTime||i.type===e.FieldType.Time?r[i.name]=n.datePipe.transform(t[i.name],ue.dateTimeFormatServer):i.type===e.FieldType.Date?r[i.name]=n.datePipe.transform(t[i.name],ue.dateFormatServer):r[i.name]=t[i.name]})),i.push(r)})),i},n.prototype.loadListBoxContent=function(){var e=this;this.data&&this.data.forEach((function(t){e.define.fields.forEach((function(n){if(n.listName){var i=pe.getListOptionsKey(n,t);if(e.define.optionsMap[i]&&e.define.optionsMap[i].length>0)return;var r=pe.getListOptionsParams(n,t);e.api.getListValues(n.listName,n.listFixParam,r,null,-1,(function(t){t&&(n.tree?e.define.optionsMap[i]=t:e.define.optionsMap[i]=pe.toKendoListValues(t))}),e.define,i)}}))}))},n.prototype.focusErrorControl=function(){this.firstErrorItemName&&this.focusControl(this.firstErrorItemName)},n.prototype.focusFirstControl=function(e){void 0===e&&(e=!0);var t=null;this.define.fields.forEach((function(n){!n.editable||null!==t||e&&!n.show||(t=n.name)})),t&&this.focusControl(t)},n.prototype.focusControl=function(e){var t=document.querySelector('[controls="'+e+'"]');if(t)if("INPUT"===t.tagName||"TEXTAREA"===t.tagName||"SELECT"===t.tagName)t.focus();else{var n=t.querySelector(".k-dropdown-wrap");if(n)return void n.focus();var i=t.querySelector(".k-input");i&&i.focus()}},n.prototype.ngOnInit=function(){},n.prototype.afterListed=function(e){},n.prototype.uf=function(e){var t=this;if(this.userFields[e])return this.userFields[e];if(this.userFields["*"]&&(!this.userFields["*"].excepts||!this.userFields["*"].excepts.includes(e)))return this.userFields["*"];var n=null;return Object.keys(this.userFields).forEach((function(i){if(i.startsWith("^")||i.endsWith("$")){var r=new RegExp(i,"i");!e.match(r)||t.userFields[i].excepts&&t.userFields[i].excepts.includes(e)||(n=t.userFields[i])}})),n},n}();Pe.decorators=[{type:t.Component,args:[{selector:"gc-base-form",template:"<p>base-form works!</p>\n",styles:[""]}]}],Pe.ctorParameters=function(){return[{type:me},{type:fe},{type:ye},{type:t.ElementRef},{type:a.DatePipe}]},Pe.propDecorators={apiUrl:[{type:t.Input}],changeToViewAfterUpdate:[{type:t.Input}],priorInlineUpdate:[{type:t.Input}],buttonOnTop:[{type:t.Input}],links:[{type:t.Input}],validators:[{type:t.Input}],auto:[{type:t.Input}],showFooterBar:[{type:t.Input}],showButtons:[{type:t.Input}],showBackButton:[{type:t.Input}],params:[{type:t.Input}],height:[{type:t.Input}],heightMargin:[{type:t.Input}],bottomDistance:[{type:t.Input}],alignByDataType:[{type:t.Input}],defineWithData:[{type:t.Input}],userFieldDirectives:[{type:t.ContentChildren,args:[Ie]}],loaded:[{type:t.Output}],defined:[{type:t.Output}],saveError:[{type:t.Output}],updated:[{type:t.Output}],inserted:[{type:t.Output}],deleted:[{type:t.Output}],listed:[{type:t.Output}],beforeInsert:[{type:t.Input}],beforeUpdate:[{type:t.Input}],beforeDelete:[{type:t.Input}],fieldVisibleCondition:[{type:t.Input}],defineLoaded:[{type:t.Input}],dataLoaded:[{type:t.Input}],dataDeleted:[{type:t.Input}],dataUpdated:[{type:t.Input}],dataInserted:[{type:t.Input}]};var Be=function(n){function i(i,r,a,l,o,s){var d=n.call(this,i,r,a,l,o)||this;return d.lang=i,d.api=r,d.message=a,d.elm=l,d.datePipe=o,d.cd=s,d.selectedBookmark=null,d.width="100%",d.minWidth=null,d.outline=null,d.outlineItems=[],d.labelPosition=null,d.panelStyle=null,d.editMode=!1,d.stripedColor=null,d.colDiv=3,d.tdWidthPercent=25,d.inCellEditable=null,d.isFieldEditable=null,d.paneForUserBlock=!1,d.tdWidth=null,d.dataLoading=!1,d.multiSelectComponent=null,d.FormStatusEnum=e.FormStatus,d.values={},d.fields={},d.groups=[],d.haveData=!1,d.changed=new t.EventEmitter,d.bottomDistance=44,d.alignByDataType=!1,d.buttonOnTop=!1,d}return oe(i,n),Object.defineProperty(i.prototype,"cols",{get:function(){return 0===this.colDiv?0:12/this.colDiv},set:function(e){e>0?(this.colDiv=12/e,this.tdWidthPercent=Math.round(100/e)):(this.colDiv=12,this.tdWidthPercent=100)},enumerable:!1,configurable:!0}),i.prototype.ngOnInit=function(){this.initFormHeight()||this.bottomDistance||(this.formHeight=null)},i.prototype.onFieldValueChange=function(e,t){this.changed.emit({name:t,value:e.value,listItem:e.listItem})},i.prototype.fieldEditable=function(t){return this.define.inCellEditField?t.name===this.define.inCellEditField:t.update&&this.status===e.FormStatus.Edit||t.insert&&(this.status===e.FormStatus.Copy||this.status===e.FormStatus.Insert)},i.prototype.init=function(){this.loadDefine()},i.prototype.loadDefine=function(){var t=this;this.apiUrl&&(this.dataLoading=!0,this.api.defineWidthParam(this.apiUrl,this.defineWithData,this.params,(function(n,i,r){if(t.dataLoading=!1,200===n){var a=r.define;t.data=[];var l=t.define?t.define.optionsMap:null;a.optionsMap=l||{},t.define=a,t.fields=a.fieldByNames,t.define.fields.forEach((function(t){t.type!==e.FieldType.Date&&t.type!==e.FieldType.DateTime&&t.type!==e.FieldType.Time||!t.defaultValue||(t.defaultValue=pe.toDatetime(t.defaultValue))})),t.inCellEditable=null===t.inCellEditable?t.define.gridInCellEditable:t.inCellEditable,t.loadFieldGroups("null"),t.defineLoaded(),t.defined.emit(),t.cd.detectChanges(),t.define.singleCols&&(t.cols=t.define.singleCols),t.define.singleLabelPosition&&null===t.labelPosition&&(t.labelPosition=t.define.singleLabelPosition),t.define.singleOutline&&null===t.outline&&(t.outline=t.define.singleOutline),t.createForm(),t.defineWithData?(t.loadWithData(r.data),t.doLoadSuccess()):t.load(),setTimeout((function(){t.resize()}),100)}else t.error(i)})))},i.prototype.doLoadSuccess=function(t){void 0===t&&(t=null),this.status=e.FormStatus.View,this.data.length>0?(this.haveData=!0,this.values=this.data[0]):(this.haveData=!1,this.values=null,this.data=[]),this.updateEditCache(),this.editMode&&(0===this.data.length&&this.define.optionInsert?this.startInsert():this.data.length>0&&this.define.optionUpdate&&this.startEdit()),this.loadListBoxContent(),this.dataLoaded(),this.loaded.emit(),!this.haveData&&this.define.optionInsert&&this.startInsert(),t&&t()},i.prototype.load=function(e){var t=this;void 0===e&&(e=null),n.prototype.load.call(this,(function(){t.doLoadSuccess(e)}))},i.prototype.startEdit=function(){this.define.inCellEditField=null,this.haveData&&(this.clearEditCache(),this.editCache[1].edit=!0,this.status=e.FormStatus.Edit,this.clearFileInput(1))},i.prototype.startCopy=function(){this.define.inCellEditField=null,this.haveData&&(this.clearEditCache(),this.data[0].new=!0,this.values=this.data[0],this.status=e.FormStatus.Copy)},i.prototype.startInsert=function(){this.define.inCellEditField=null,this.clearEditCache();var t={};this.data.length>0&&this.data[0]._options_&&(t=this.data[0]._options_);var n={new:!0,serial:1,_options_:t};this.initDefaultValue(n),this.haveData?this.data[0]=n:(this.editCache[1]={edit:!0,delete:!1,data:Object.assign({},n)},this.data.push(n)),this.values=this.data[0],this.loadListBoxContent(),this.status=e.FormStatus.Insert},i.prototype.cancel=function(){this.define.inCellEditField=null,this.clearValidate(),this.copyEditModelFieldEditCache(1,0),pe.objectAssign(this.data[0],this.editCache[1].data),this.editCache[1].edit=!1,delete this.data[0].new,this.haveData?this.values=this.data[0]:(delete this.editCache[1],this.data=[],this.values=null),this.status=e.FormStatus.View},i.prototype.save=function(){var t=this;n.prototype.save.call(this,1,(function(n,i){n===e.ServiceCode.Success&&(delete t.data[0].new,t.haveData=!0,t.updateEditCache(),t.status=e.FormStatus.View,t.define.inCellEditField=null)}))},i.prototype.deleteConfirm=function(){var e=this;this.message.confirm(this.lang.define.lib.deleteConfirmMessage,(function(t){t&&e.delete()}))},i.prototype.delete=function(){var t=this;n.prototype.delete.call(this,1,(function(n,i){n===e.ServiceCode.Success&&t.load()}))},i.prototype.edit=function(){this.startEdit()},i.prototype.ngAfterViewInit=function(){this.cd.detectChanges(),this.loadUserFields()},i.prototype.onResize=function(e){this.resize()},i.prototype.createForm=function(){var e=this;if(this.define){this.outlineItems=[];var t=[],n=null,i=0;this.define.fields.forEach((function(r){r.hidden||(n&&n.name===r.groupName||(i++,n={name:r.groupName,fields:[],rows:[],cols:e.cols,headerWidth:e.define.singleHeaderWidth?e.define.singleHeaderWidth:null,bookmark:"bookmark"+i},t.push(n),e.outlineItems.push({text:r.groupName&&"null"!==r.groupName?r.groupName:"TOP",icon:"k-i-circle",bookmark:"bookmark"+i})),n.fields.push(r))})),t.forEach((function(t){var n=0,i=null,r=t.cols,a=!1;if(t.fields.forEach((function(e){n+=e.colSpan?e.colSpan:1,(!i||n>r||a)&&(i=[],t.rows.push(i),n=e.colSpan?e.colSpan:1),i.push(e),a=e.lineBreak})),i&&"horizontal"===e.labelPosition&&(n=0,i.forEach((function(e){n+=e.colSpan?e.colSpan:1})),n<r))for(var l=0;l<r-n;l++)i.push(null)})),this.groups=t}},i.prototype.resize=function(){if(this.define){n.prototype.resize.call(this);var e=this.el.nativeElement.getBoundingClientRect().width;this.tdWidth=(e-this.cols*(this.define.singleHeaderWidth?this.define.singleHeaderWidth:0))/this.cols}},i.prototype.clickEvent=function(e,t){t.ctrlKey&&this.dblClickEvent(e)},i.prototype.dblClickEvent=function(t){var n=this;if(this.inCellEditable&&this.define.optionUpdate&&!t.editMode&&this.define.inCellEditField&&this.status===e.FormStatus.View){var i=t.name;this.isFieldEditable&&!this.isFieldEditable(i,this.values)||t.editable&&t.update&&(this.cancel(),this.startEdit(),this.define.inCellEditField=i,setTimeout((function(){n.focusControl(i)}),200))}},i.prototype.outlineSelected=function(e){var t=e.item.bookmark;this.selectedBookmark=t;var n=document.getElementById(t);n&&n.scrollIntoView()},i}(Pe);Be.decorators=[{type:t.Component,args:[{selector:"gc-single-form",template:'\x3c!--suppress TypeScriptValidateTypes, TypeScriptUnresolvedVariable --\x3e\r\n<ng-container *ngIf="define">\r\n  <ng-template *ngIf="auto;then autoBlock; else userBlock"></ng-template>\r\n\r\n  <ng-template #userBlock>\r\n    <ng-template [ngIf]="!paneForUserBlock">\r\n      <ng-content></ng-content>\r\n    </ng-template>\r\n    <div\r\n      *ngIf="paneForUserBlock"\r\n      [style.width]="\'100%\'"\r\n      [style.height]="formHeight ? formHeight +\'px\' : null"\r\n      [style]="\'overflow-y: auto;overflow-x: auto;\'+panelStyle" class="field-panel">\r\n      <div [style.width]="width" [style.minWidth]="minWidth ? minWidth + \'px\': null" >\r\n        <ng-content></ng-content>\r\n      </div>\r\n    </div>\r\n  </ng-template>\r\n\r\n  <ng-template #autoBlock>\r\n    <ng-template *ngIf="outline && outlineItems && outlineItems.length > 1;then outlineBlock; else legacyBlock"></ng-template>\r\n    <ng-template #legacyBlock>\r\n      <ng-container *ngTemplateOutlet="content"></ng-container>\r\n    </ng-template>\r\n    <ng-template #outlineBlock>\r\n      <kendo-drawer-container>\r\n        <kendo-drawer\r\n          [autoCollapse]="false"\r\n          [items]="outlineItems"\r\n          position="end"\r\n          mode="push"\r\n          [mini]="false"\r\n          [expanded]="true"\r\n          (select)="outlineSelected($event)"\r\n        >\r\n        </kendo-drawer>\r\n        <kendo-drawer-content>\r\n          <ng-container *ngTemplateOutlet="content"></ng-container>\r\n        </kendo-drawer-content>\r\n      </kendo-drawer-container>\r\n\r\n    </ng-template>\r\n\r\n\r\n  </ng-template>\r\n\r\n  <ng-template #nodeTemplateRef let-node>\r\n    <table class="{{ node.border ? \'gc-border-table\': \'gc-no-border-table\' }} {{ node.class }}" [style.width]="node.width">\r\n      \x3c!--suppress AngularInvalidExpressionResultType --\x3e\r\n      <tr *ngFor="let cols of node.rows">\r\n        \x3c!--suppress TypeScriptUnresolvedVariable --\x3e\r\n        <td *ngFor="let cell of cols"\r\n            [colSpan]="cell.colspan"\r\n            [style.width]="cell.width"\r\n            [style.verticalAlign] = "cell.verticalAlign"\r\n            style="{{cell.style}}"\r\n            [class.gc-background-cell]="cell.background"\r\n            [class.gc-header-cell]= "cell.value.type === 1 || cell.value.type === 4"\r\n        >\r\n          <ng-template [ngIf]="cell.value.rows">\r\n            <ng-template\r\n              [ngTemplateOutlet]="nodeTemplateRef"\r\n              [ngTemplateOutletContext]="{ $implicit: cell.value }">\r\n            </ng-template>\r\n          </ng-template>\r\n          <ng-template [ngIf]="!cell.value.rows">\r\n            <ng-template [ngIf]="cell.value.type === 1">\r\n              {{ define.fieldByNames[cell.value.value].caption }}\r\n            </ng-template>\r\n            <ng-template [ngIf]="cell.value.type === 2">\r\n              <gc-field\r\n                [baseForm]="this"\r\n                [alignByDataType]="alignByDataType"\r\n                [define]="define.fieldByNames[cell.value.value]"\r\n                [apiUrl]="apiUrl"\r\n                [link]="links?links[cell.value.value]:null"\r\n                [form]="define"\r\n                [record]="values"\r\n                [width]="define.fieldByNames[cell.value.value].width? define.fieldByNames[cell.value.value].width+\'px\' : \'100%\'"\r\n                [(value)]="values[cell.value.value]"\r\n                [editable]="fieldEditable(define.fieldByNames[cell.value.value])"\r\n                (changed)="onFieldValueChange($event, cell.value.value)"\r\n                (detailMultiSelect)="multiSelectComponent = $event"\r\n              ></gc-field>\r\n            </ng-template>\r\n            <ng-template [ngIf]="cell.value.type === 3 || cell.value.type === 4">\r\n              {{ cell.value.value }}\r\n            </ng-template>\r\n          </ng-template>\r\n        </td>\r\n      </tr>\r\n    </table>\r\n\r\n  </ng-template>\r\n\r\n\r\n\r\n  \x3c!--Back button--\x3e\r\n  <div style="{{ (showButtons && (define.optionDelete ||define.optionInsert || define.optionUpdate)) || userButtonDirectives.length > 0 ?\r\n  \'display: flex; width: 100%; padding-top: 4px;margin-bottom: 4px;margin-top: 4px;\' : \'\' }}">\r\n    <ng-template [ngIf]="showButtons">\r\n      <ng-template [ngIf]="showBackButton">\r\n        <gc-back-button></gc-back-button>\r\n      </ng-template>\r\n\r\n      \x3c!-- System button --\x3e\r\n      <ng-container *ngTemplateOutlet="buttons"></ng-container>\r\n    </ng-template>\r\n\r\n    \x3c!---User button--\x3e\r\n    <ng-template [ngIf]="userButtonDirectives && userButtonDirectives.length >0">\r\n      <div class="split"></div>\r\n      <ng-container *ngFor="let marker of userButtonDirectives">\r\n        <ng-template [ngTemplateOutlet]="marker.template"></ng-template>\r\n      </ng-container>\r\n    </ng-template>\r\n\r\n  </div>\r\n\r\n  \x3c!-- content --\x3e\r\n  <ng-template #content>\r\n    <div\r\n\r\n      [style.width]="\'100%\'"\r\n      [style.height]="formHeight ? formHeight +\'px\' : null"\r\n      [style]="\'overflow-y: auto;overflow-x: auto;\'+panelStyle" class="field-panel">\r\n      <div\r\n        *ngIf="!define.formTemplate"\r\n        [style.width]="width" [style.minWidth]="minWidth ? minWidth + \'px\': null" >\r\n        <div id="bookmark1"></div>\r\n\r\n        <ng-template *ngIf="labelPosition==\'vertical\';then verticalBlock; else horizontalBlock"></ng-template>\r\n        \x3c!-- Vertical --\x3e\r\n        <ng-template #verticalBlock>\r\n          <ng-template [ngIf]="data && data.length > 0">\r\n            <div *ngFor="let group of groups;let index = index"\r\n                 class="{{ (index % 2) === 1 ? \'single-form-stripe2\' : \'single-form-stripe1\'}}"\r\n            >\r\n              <div class="row m-0" *ngIf="group.name && group.name !== \'null\'">\r\n                <div class="col-md-12 col-sm-12 p-0">\r\n                  <div id="{{group.bookmark //noinspection XmlDuplicatedId}}"\r\n                       [style.color]="group.bookmark === selectedBookmark ? \'blue\': null"\r\n                       class="group-name gc-single-form-group-header gc-single-form-group-header-horizontal">{{ group.name }}</div>\r\n                </div>\r\n              </div>\r\n\r\n              <ng-container  *ngFor="let row of group.rows">\r\n                <div class="row m-0" >\r\n                  <ng-container *ngFor="let field of row">\r\n                    <div\r\n                      (click)="clickEvent(field, $event)"\r\n                      (dblclick)="dblClickEvent(field)"\r\n                      [hidden]="field.hidden || (fieldVisibleCondition && !fieldVisibleCondition(field.name, values))"\r\n                      class="col-lg-{{ field.colSpan ? (field.colSpan * colDiv): colDiv}} col-sm-12 col-md-6 field-block p-1">\r\n                      <div class="field-label">{{ field.caption }}<span *ngIf="field.required" class="field-required">*{{ field.requiredGroup }}</span></div>\r\n                      <ng-template [ngIf]="!uf(field.name) || (fieldEditable(field) && uf(field.name).mode==\'view\') || (!fieldEditable(field) && uf(field.name).mode==\'edit\')"\r\n                                   [ngIfElse]="custom">\r\n                        <gc-field\r\n                          [baseForm]="this"\r\n                          [alignByDataType]="alignByDataType"\r\n                          [define]="field"\r\n                          [apiUrl]="apiUrl"\r\n                          [link]="links?links[field.name]:null"\r\n                          [form]="define"\r\n                          [record]="values"\r\n                          [(value)]="values[field.name]"\r\n                          [editable]="fieldEditable(field)"\r\n                          (changed)="onFieldValueChange($event, field.name)"\r\n                          (detailMultiSelect)="multiSelectComponent = $event"\r\n                          [width]="field.width? field.width+\'px\' : \'100%\'"\r\n                        ></gc-field>\r\n                      </ng-template>\r\n                      <ng-template #custom>\r\n                        <ng-template [ngTemplateOutlet]="uf(field.name).template"\r\n                                     [ngTemplateOutletContext]="{$implicit: values, editable: fieldEditable(field), field: field}"></ng-template>\r\n                      </ng-template>\r\n                    </div>\r\n                  </ng-container>\r\n\r\n                </div>\r\n              </ng-container>\r\n            </div>\r\n          </ng-template>\r\n\r\n        </ng-template>\r\n\r\n        \x3c!-- Horizontal--\x3e\r\n        <ng-template #horizontalBlock>\r\n          <table class="field-table">\r\n            <ng-template [ngIf]="data && data.length > 0">\r\n              <ng-container  *ngFor="let group of groups">\r\n                <ng-container *ngIf="group.name && group.name !== \'null\'">\r\n                  <tr>\r\n                    <td [colSpan]="cols*2">\r\n                      <div id="{{group.bookmark}}" class="group-name gc-single-form-group-header"\r\n                           [style.color]="group.bookmark === selectedBookmark ? \'blue\': null"\r\n                      >{{ group.name }}</div>\r\n                    </td>\r\n                  </tr>\r\n                </ng-container>\r\n                <ng-container  *ngFor="let row of group.rows">\r\n                  <tr>\r\n                    <ng-container  *ngFor="let field of row">\r\n                      <ng-template [ngIf]="field && !(field.hidden || (fieldVisibleCondition && !fieldVisibleCondition(field.name, values)))">\r\n                        <th\r\n                          class="gc-single-form-header">\r\n                          <div [style]="{width: group.headerWidth?group.headerWidth + \'px!important\' : null}">\r\n                            <ng-template [ngIf]="!(field.hidden || (fieldVisibleCondition && !fieldVisibleCondition(field.name, values)))">\r\n                              {{ field.caption }}<span *ngIf="field.required" class="field-required">*{{ field.requiredGroup }}</span>\r\n                            </ng-template>\r\n                          </div>\r\n                        </th>\r\n\x3c!--                        [style]="{width: (field.colSpan ? (field.colSpan * tdWidthPercent) : tdWidthPercent) + \'%!important\' }"--\x3e\r\n\r\n                        <td\r\n                          [colSpan]="field.colSpan ? (field.colSpan*2-1) : 1"\r\n                          (dblclick)="dblClickEvent(field)"\r\n                          (click)="clickEvent(field, $event)"\r\n                        >\r\n                          <ng-template [ngIf]="!(field.hidden || (fieldVisibleCondition && !fieldVisibleCondition(field.name, values)))">\r\n                            <ng-template [ngIf]="!uf(field.name) || (fieldEditable(field) && uf(field.name).mode==\'view\') || (!fieldEditable(field) && uf(field.name).mode==\'edit\')"\r\n                                         [ngIfElse]="custom">\r\n                              <gc-field\r\n                                [baseForm]="this"\r\n                                [alignByDataType]="alignByDataType"\r\n                                [define]="field"\r\n                                [apiUrl]="apiUrl"\r\n                                [link]="links?links[field.name]:null"\r\n                                [form]="define"\r\n                                [record]="values"\r\n\r\n                                [(value)]="values[field.name]"\r\n                                [editable]="fieldEditable(field)"\r\n                                (changed)="onFieldValueChange($event, field.name)"\r\n                                (detailMultiSelect)="multiSelectComponent = $event"\r\n                                [width]="field.width? field.width +\'px\' : \'100%\'"\r\n                              ></gc-field>\r\n                            </ng-template>\r\n                            <ng-template #custom>\r\n                              <ng-template [ngTemplateOutlet]="uf(field.name).template"\r\n                                           [ngTemplateOutletContext]="{$implicit: values, editable: fieldEditable(field), field: field}"></ng-template>\r\n                            </ng-template>\r\n                          </ng-template>\r\n                        </td>\r\n                      </ng-template>\r\n                      <ng-template [ngIf]="!field">\r\n                        <td [colSpan]="2"></td>\r\n                      </ng-template>\r\n\r\n                    </ng-container>\r\n                  </tr>\r\n                </ng-container>\r\n              </ng-container>\r\n            </ng-template>\r\n          </table>\r\n        </ng-template>\r\n      </div>\r\n\r\n      <ng-template [ngIf]="define.formTemplate">\r\n        \x3c!--\r\n          Initiate the recursive template rendering. Because our recursive template is going to\r\n          be using the ngFor directive to render recursively, the "context" in the recursive\r\n          instances is going to be the ngForContext. As such, we have to "mock" the initial\r\n          context to look like the context that the ngFor directive will expose internally.\r\n\r\n          NOTE: If we used ngContainer or ngTemplate to invoke the recursion internally, we\'d\r\n          have more control over which values were made available at each level.\r\n        --\x3e\r\n        <ng-template\r\n          [ngTemplateOutlet]="nodeTemplateRef"\r\n          [ngTemplateOutletContext]="{ $implicit: define.formTemplate }">\r\n        </ng-template>\r\n      </ng-template>\r\n\r\n    </div>\r\n  </ng-template>\r\n\r\n  \x3c!-- button --\x3e\r\n  <ng-template #buttons>\r\n    <button kendoButton icon="plus" [primary]="false"\r\n            (click)="startInsert()"\r\n            title="{{ lang.define.lib.add }}"\r\n            style="margin-right: 4px;" [hidden]="status!=FormStatusEnum.View || !define.optionInsert">\r\n      {{ lang.define.lib.add }}\r\n    </button>\r\n    <button kendoButton icon="edit" [primary]="false"\r\n            (click)="startEdit()"\r\n            title="{{ lang.define.lib.edit}}"\r\n            style="margin-right: 4px;"\r\n            [hidden]="status!=FormStatusEnum.View || !define.optionUpdate || !editCache  || !editCache[1]">\r\n      {{ lang.define.lib.edit }}\r\n    </button>\r\n    <button kendoButton icon="close"\r\n            *ngIf="haveData"\r\n            (click)="cancel()" style="margin-right: 4px;"\r\n            title="{{ lang.define.lib.cancel}}"\r\n            [hidden]="status==FormStatusEnum.View || (!define.optionInsert && !define.optionUpdate) || !editCache[1]">\r\n      {{ lang.define.lib.cancel}}</button>\r\n    <button\r\n      kendoButton icon="save" [primary]="true"\r\n      title="{{ lang.define.lib.save }}"\r\n      (click)="save()"\r\n      style="margin-right: 4px;"\r\n      [hidden]="status==FormStatusEnum.View || (!define.optionInsert && !define.optionUpdate)"\r\n    >{{ lang.define.lib.save }}</button>\r\n    <button kendoButton icon="copy" [primary]="false"\r\n            (click)="startCopy()"\r\n            title="{{ lang.define.lib.copy }}"\r\n            style="margin-right: 4px;" [hidden]="status!=FormStatusEnum.View || (!define.optionInsert)|| !editCache  || !editCache[1]">\r\n      {{ lang.define.lib.copy }}\r\n    </button>\r\n    <button kendoButton icon="trash" [primary]="true"\r\n            style="margin-right: 4px;"\r\n            (click)="deleteConfirm()"\r\n            title="{{ lang.define.lib.delete }}"\r\n            [hidden]="status!=FormStatusEnum.View || !define.optionDelete || !editCache  || !editCache[1]"\r\n    >{{ lang.define.lib.delete }}</button>\r\n  </ng-template>\r\n\r\n</ng-container>\r\n\r\n\x3c!-- Do not understand this is for what. But maybe need ... Ah, remember! for not hide multi select detail box when col lock  --\x3e\r\n\x3c!-- Just wait. Indeed no need  --\x3e\r\n\x3c!--<gc-multi-select-detail [parent]="multiSelectComponent"></gc-multi-select-detail>--\x3e\r\n\r\n\r\n\r\n<div *ngIf="dataLoading || loading" class="k-i-loading"></div>\r\n',styles:[".field-block{margin-bottom:8px;min-height:50px;border-bottom:1px solid rgba(50,50,50,.1)}.field-label{font-weight:700;margin-bottom:2px}.field-table{width:100%;border:none;border-collapse:collapse;border-spacing:8px;margin-bottom:10px}.field-table td{padding:5px;height:35px;border-bottom:1px solid rgba(50,50,50,.1)}.field-table th{padding-right:10px;padding-left:5px;text-align:left;border:1px solid rgba(0,0,0,.15)}.field-required{padding-left:5px;color:red}.field-panel{padding:0;background-color:transparent}.group-name{margin-top:4px;margin-bottom:2px;padding-bottom:2px;font-weight:700;text-transform:uppercase}.k-i-loading{position:fixed;top:0;left:0;right:0;bottom:0;font-size:64px;background-color:hsla(0,0%,100%,.1);color:#ff6757;z-index:99999}.gc-border-table{border:none;border-collapse:collapse;border-spacing:2px}.gc-border-table td{height:35px}.gc-border-table td,.gc-border-table th{padding:5px 15px 5px 5px;border:1px solid rgba(0,0,0,.15)}.gc-border-table th{text-align:left}.gc-no-border-table{border:none;border-collapse:collapse;border-spacing:2px}.gc-no-border-table td,.gc-no-border-table th{padding:5px 15px 5px 0;border:none;vertical-align:top}.gc-background-cell{background-color:var(--theme-grid-header-bg);color:var(--theme-grid-header-text)}.gc-header-cell{font-weight:700}"]}]}],Be.ctorParameters=function(){return[{type:me},{type:fe},{type:ye},{type:t.ElementRef},{type:a.DatePipe},{type:t.ChangeDetectorRef}]},Be.propDecorators={width:[{type:t.Input}],minWidth:[{type:t.Input}],outline:[{type:t.Input}],labelPosition:[{type:t.Input}],panelStyle:[{type:t.Input}],editMode:[{type:t.Input}],stripedColor:[{type:t.Input}],cols:[{type:t.Input}],inCellEditable:[{type:t.Input}],isFieldEditable:[{type:t.Input}],paneForUserBlock:[{type:t.Input}],buttons:[{type:t.ViewChild,args:["buttons"]}],userButtonDirectives:[{type:t.ContentChildren,args:[ke]}],changed:[{type:t.Output}],onResize:[{type:t.HostListener,args:["window:resize",["$event"]]}]};var Oe=function(){function e(){this.selectedKeys=[],this.expandedKeys=[],this.popupWidth=null,this.data=[],this.show=!1,this.text=null,this.valueChange=new t.EventEmitter,this.width=null,this.selected=new t.EventEmitter,this.parsedData=this.data,this.searchTerm="",this.children=function(e){return i.of(e.items)},this.hasChildren=function(e){return!!e.items}}return Object.defineProperty(e.prototype,"value",{get:function(){return this.selectedKeys[0]},set:function(e){this.selectedKeys=[e],this.findText()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"items",{get:function(){return this.data},set:function(e){this.data=e,this.parsedData=this.data,this.findText()},enumerable:!1,configurable:!0}),e.prototype.ngOnInit=function(){this.findText()},e.prototype.onToggle=function(e){this.show=!this.show,this.show||(e.value=this.text)},e.prototype.selectionChange=function(e){var t=e.dataItem;this.text=t.text,this.valueChange.emit(t.value),this.selected.emit(t),this.show=!1},e.prototype.clear=function(){this.value=null,this.text=null,this.valueChange.emit(null),this.selected.emit(null),this.show=!1,this.parsedData=this.search(this.data,null),this.expandAll()},e.prototype.findText=function(e,t){var n,i,r=this;if(void 0===e&&(e=null),void 0===t&&(t=[]),!e&&(e=this.data,this.expandedKeys=[],this.text=null,!e||e.length<1||!this.value))return!1;var a=e.findIndex((function(e){return e.value===r.value}));if(a>-1)return this.text=e[a].text,this.expandedKeys=t,!0;a=0;try{for(var l=se(e),o=l.next();!o.done;o=l.next()){var s=o.value;if(s.items){var d=ce(t);if(t.length>0?d.push(t[t.length-1]+"_"+a.toString()):d.push(a.toString()),this.findText(s.items,d))break}a++}}catch(e){n={error:e}}finally{try{o&&!o.done&&(i=l.return)&&i.call(l)}finally{if(n)throw n.error}}return!1},e.prototype.onkeyup=function(e,t){var n=e.value;if("Escape"===t.key)return this.show=!1,void(e.value=this.text);this.parsedData=this.search(this.data,n),this.expandAll()},e.prototype.onfocus=function(e){var t=this;this.parsedData=this.search(this.data,e),this.expandTo(e),setTimeout((function(){t.show=!0}),200)},e.prototype.onblur=function(e){0===this.parsedData.length&&(e.value=this.text,this.show=!1)},e.prototype.expandTo=function(e,t,n){var i,r,a=this;if(void 0===t&&(t=null),void 0===n&&(n=[]),!t&&(t=this.parsedData,this.expandedKeys=[],!t||t.length<1||!e))return!1;var l=t.findIndex((function(t){return a.contains(t.text,e)}));if(l>-1)return this.expandedKeys=n,!0;l=0;try{for(var o=se(t),s=o.next();!s.done;s=o.next()){var d=s.value;if(d.items){var c=ce(n);if(n.length>0?c.push(n[n.length-1]+"_"+l.toString()):c.push(l.toString()),this.expandTo(e,d.items,c))break}l++}}catch(e){i={error:e}}finally{try{s&&!s.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}return!1},e.prototype.expandAll=function(e,t,n){var i,r;void 0===e&&(e=null),void 0===t&&(t=[]),void 0===n&&(n=null);var a=!1;if(e||(a=!0,e=this.parsedData,this.expandedKeys=[],e&&!(e.length<1))){var l=0;try{for(var o=se(e),s=o.next();!s.done;s=o.next()){var d=s.value;if(d.items){var c=l.toString();n&&(c=n+"_"+l.toString()),t.push(c),this.expandAll(d.items,t,c)}l++}}catch(e){i={error:e}}finally{try{s&&!s.done&&(r=o.return)&&r.call(o)}finally{if(i)throw i.error}}a&&(this.expandedKeys=t)}},e.prototype.search=function(e,t){var n=this;return t&&""!==t.trim()?e.reduce((function(e,i){if(n.contains(i.text,t))e.push(i);else if(i.items&&i.items.length>0){var r=n.search(i.items,t);r.length>0&&e.push({text:i.text,value:i.value,items:r})}return e}),[]):e},e.prototype.contains=function(e,t){return!(!e||!t)&&e.toLowerCase().indexOf(t.toLowerCase())>=0},e}();Oe.decorators=[{type:t.Component,args:[{selector:"gc-tree-dropdown",template:'\x3c!--suppress AngularInvalidExpressionResultType --\x3e\r\n<div [style.width]="width? width + \'px\': \'100%\'"  #anchor>\r\n  <kendo-textbox [clearButton]="false"\r\n                 (blur)="onblur(searchTextBox)"\r\n                 (inputFocus)="popupWidth = (anchor.clientWidth-1) + \'px\';onfocus(searchTextBox.value)"\r\n                 (keyup)="onkeyup(searchTextBox, $event)"\r\n                 [value]="text" style="width: 100%;"\r\n                 #searchTextBox\r\n  >\r\n    <ng-template kendoTextBoxSuffixTemplate>\r\n      <button kendoButton look="clear" icon="close" *ngIf="value" (click)="clear()"></button>\r\n      <button kendoButton look="flat" icon="arrow-60-down" (click)="popupWidth = (anchor.clientWidth > 150 ? (anchor.clientWidth-1) : null) + \'px\';onToggle(searchTextBox)"></button>\r\n    </ng-template>\r\n  </kendo-textbox>\r\n</div>\r\n\x3c!--(anchorViewportLeave)="show = false" [hidden]="!show"--\x3e\r\n<kendo-popup [anchor]="$any(anchor)" (anchorViewportLeave)="show = false" *ngIf="show">\r\n  <div [style.width]="popupWidth" style="max-height: 250px; overflow-y: auto;">\r\n    <div *ngIf="parsedData.length==0" style="width: 100%;padding: 4px 4px 4px 4px; color: gray;" class="k-treeview">No data</div>\r\n    <kendo-treeview\r\n      style="width: 100%;"\r\n      [nodes]="parsedData"\r\n      [textField]="\'text\'"\r\n      kendoTreeViewExpandable\r\n      kendoTreeViewSelectable\r\n      kendoTreeViewHierarchyBinding\r\n      childrenField="items"\r\n      [selectBy]="\'value\'"\r\n      [(selectedKeys)]="selectedKeys"\r\n      [(expandedKeys)]="expandedKeys"\r\n      (selectionChange)="selectionChange($event)"\r\n\r\n      [children]="children"\r\n      [hasChildren]="hasChildren"\r\n    >\r\n    </kendo-treeview>\r\n  </div>\r\n</kendo-popup>\r\n\r\n',styles:[""]}]}],Oe.ctorParameters=function(){return[]},Oe.propDecorators={value:[{type:t.Input}],items:[{type:t.Input}],valueChange:[{type:t.Output}],width:[{type:t.Input}],selected:[{type:t.Output}]};var Ne=function(){function e(){this.f=null,this.multiSelectRadioMode=!1,this.multiSelectCheckMode=!1,this.changed=new t.EventEmitter}return Object.defineProperty(e.prototype,"form",{get:function(){return this.f},set:function(e){this.f=e},enumerable:!1,configurable:!0}),e.prototype.ngOnInit=function(){},e.prototype.onChange=function(e){this.changed.emit(e)},e}();Ne.decorators=[{type:t.Component,args:[{selector:"gc-field-single-form",template:'<ng-template [ngIf]="f && f.define && f.data && f.data.length > 0">\r\n  <gc-field\r\n          [alignByDataType]="f.alignByDataType"\r\n    [define]="f.define.fieldByNames[name]"\r\n    [apiUrl]="f.apiUrl"\r\n    [link]="f.links?f.links[name]:null"\r\n    [form]="f.define"\r\n    [record]="f.values"\r\n    [(value)]="f.values[name]"\r\n    [editable]="f.fieldEditable(f.define.fieldByNames[name])"\r\n    (changed)="f.onFieldValueChange($event, name)"\r\n    (detailMultiSelect)="f.multiSelectComponent = $event"\r\n          [multiSelectCheckMode]="multiSelectCheckMode"\r\n          [multiSelectRadioMode]="multiSelectRadioMode"\r\n  ></gc-field>\r\n\r\n</ng-template>\r\n\r\n',styles:[""]}]}],Ne.ctorParameters=function(){return[]},Ne.propDecorators={form:[{type:t.Input}],multiSelectRadioMode:[{type:t.Input}],multiSelectCheckMode:[{type:t.Input}],name:[{type:t.Input}],changed:[{type:t.Output}]};var Ve=function(){function e(){this.f=null,this.index=0,this.multiSelectRadioMode=!1,this.multiSelectCheckMode=!1,this.changed=new t.EventEmitter}return Object.defineProperty(e.prototype,"form",{get:function(){return this.f},set:function(e){this.f=e},enumerable:!1,configurable:!0}),e.prototype.ngOnInit=function(){},e.prototype.onChange=function(e){this.changed.emit(e)},e}();Ve.decorators=[{type:t.Component,args:[{selector:"gc-field-grid-form",template:'<ng-template [ngIf]="f && f.define && f.data && f.data.length > 0">\r\n  <gc-field\r\n          [alignByDataType]="f.alignByDataType"\r\n          [apiUrl]="f.apiUrl"\r\n          [link]="f.links?f.links[name]:null"\r\n          [form]="f.define"\r\n          [define]="f.define.fieldByNames[name]"\r\n          [record]="f.data[index]"\r\n          [(value)]="f.data[index][name]"\r\n          [editable]="f.fieldEditable(f.data[index].serial, f.define.fieldByNames[name])"\r\n          (changed)="f.onFieldValueChange($event, f.data[index].serial, name)"\r\n          (detailMultiSelect)="f.openMultiSelectDetail($event)"\r\n          [multiSelectCheckMode]="multiSelectCheckMode"\r\n          [multiSelectRadioMode]="multiSelectRadioMode"\r\n  ></gc-field>\r\n</ng-template>\r\n',styles:[""]}]}],Ve.ctorParameters=function(){return[]},Ve.propDecorators={form:[{type:t.Input}],name:[{type:t.Input}],index:[{type:t.Input}],multiSelectRadioMode:[{type:t.Input}],multiSelectCheckMode:[{type:t.Input}],changed:[{type:t.Output}]};var Le=function(){function n(e,n,i){this.message=e,this.api=n,this.lang=i,this.dialogVisible=!1,this.file=null,this.apiUrl=null,this.deleteOption=!1,this.sampleOption=!0,this.define=null,this.note=null,this.imported=new t.EventEmitter,this.caption=null,this.primary=!1,this.loading=!1,this.deleteData=!1}return n.prototype.ngOnInit=function(){},n.prototype.onFileChange=function(e){e.target.files&&e.target.files.length?this.file=e.target.files[0]:this.file=null},n.prototype.upload=function(){var t=this;this.apiUrl&&(this.file?(this.loading=!0,this.api.import(this.apiUrl,{file:this.file,note:"Note",deleteData:this.deleteData},(function(n,i,r){t.loading=!1,n!==e.ServiceCode.Success?(t.message.error(i),t.file=null,t.myInputVariable.nativeElement.value=""):(t.close(),t.message.success(t.lang.define.lib.importSuccessMessage),t.imported&&t.imported.emit())}))):this.message.error(this.lang.define.lib.selectFileImportMessage))},n.prototype.download=function(){var t=this;this.apiUrl&&(this.loading=!0,this.api.sample(this.apiUrl,this.define,{},(function(n,i){t.loading=!1,n!==e.ServiceCode.Success&&t.message.error(i)})))},n.prototype.close=function(){this.dialogVisible=!1,this.file=null},n}();Le.decorators=[{type:t.Component,args:[{selector:"gc-import-button",template:'<button kendoButton icon="upload" (click)="dialogVisible=true" [primary]="primary">{{ caption }}</button>\r\n\r\n<kendo-dialog *ngIf="dialogVisible" (close)="close()" [width]="600">\r\n  <kendo-dialog-titlebar>\r\n    <div style="font-size: 18px; line-height: 1.3em;">\r\n      <span class="k-icon k-i-add"></span> Import\r\n    </div>\r\n  </kendo-dialog-titlebar>\r\n  <input type="file" (change)="onFileChange($event)" #myInput/>\r\n  <br>{{ lang.define.lib.uploadMaxFilesize }}: {{ define? define.uploadMaxFilesize: \'\' }}<br>\r\n  <ng-template [ngIf]="deleteOption">\r\n    <br><br><input type="checkbox" kendoCheckBox [(ngModel)]="deleteData"> {{ lang.message(\'delete data before import\') }}\r\n  </ng-template>\r\n\r\n  <br><br>\r\n  {{ note }}\r\n  <kendo-dialog-actions [layout]="\'normal\'">\r\n    <button kendoButton icon="close" (click)="close()">{{ lang.define.lib.close }}</button>\r\n    <button kendoButton [primary]="true" [icon]="\'download\'" (click)="download()"\r\n            *ngIf="sampleOption">{{ lang.define.lib.sample }}</button>\r\n    <button kendoButton [primary]="true" [icon]="\'upload\'" (click)="upload()">{{ lang.define.lib.import }}</button>\r\n  </kendo-dialog-actions>\r\n</kendo-dialog>\r\n\r\n<div *ngIf="loading" class="k-i-loading"></div>\r\n',styles:[".k-i-loading{position:fixed;top:0;left:0;right:0;bottom:0;font-size:64px;background-color:hsla(0,0%,100%,.1);color:#ff6757;z-index:99999}"]}]}],Le.ctorParameters=function(){return[{type:ye},{type:fe},{type:me}]},Le.propDecorators={myInputVariable:[{type:t.ViewChild,args:["myInput"]}],apiUrl:[{type:t.Input}],deleteOption:[{type:t.Input}],sampleOption:[{type:t.Input}],define:[{type:t.Input}],note:[{type:t.Input}],imported:[{type:t.Output}],caption:[{type:t.Input}],primary:[{type:t.Input}]};var Ae=function(n){function i(i,r,a,l,o,s,d,c){var u=n.call(this,i,r,a,l,o)||this;return u.lang=i,u.api=r,u.message=a,u.el=l,u.datePipe=o,u.state=s,u.cd=d,u.ngZone=c,u.config=ue,u.searchListValuesCache={},u.searchListValuesCacheParam={},u.groups=[],u.dataLoading=!1,u.FormStatusEnum=e.FormStatus,u.FieldTypeEnum=e.FieldType,u.visibleDetailModal=!1,u.detailModalTitle="",u.detailModalIcon="add",u.visibleColumnPanel=!1,u.visibleFields=[],u.searchOnlyFields=[],u.searchFields=[],u.visibleSearchPane=!1,u.visibleEditColumnPane=!1,u.searchBySearchPane=!1,u.searchPaneTitle=null,u.selectEditColumnPaneTitle=u.lang.define.lib.editItem,u.importDeleteOption=!1,u.importNote=null,u.cellClassFunction=null,u.dataPagerVisible=!0,u.pageSizesThreshold=20,u.rowButtonVisible=!0,u.charWidth=8,u.wrapHeader=null,u.currentIndex=null,u.searchCache={},u.searchCacheSearchPane={},u.searchOptions={},u.pageSizes=[{text:"5",value:5},{text:"10",value:10},{text:"20",value:20},{text:"50",value:50},{text:"100",value:100},{text:"500",value:500},{text:"1000",value:1e3},{text:"2000",value:2e3}],u.settingCommands=[],u.editModeFieldCheck={},u.editModeFieldIndeterminate={},u.columnTableState={take:20,skip:0},u.defaultColumnWidth=150,u.inlineItems=[],u.inlineItem=null,u.selection=null,u.view=null,u.groupAble=!1,u.autoSize=null,u.copyDialogTitle="Copy",u.addDialogTitle="Add",u.updateDialogTitle="Update",u.viewDialogTitle="View",u.detailDialogWidth=900,u.searchDialogWidth=800,u.enableMasterDetail=!1,u.masterDetailPaneCols=2,u.masterDetailPaneEditHeight=400,u.headerResizable=null,u.excelColumnSelectable=null,u.inCellEditable=null,u.showButtonText=ue.defaultGridShowButtonText,u.buttonPrimary=ue.defaultGridButtonPrimary,u.buttonOnTop=ue.defaultGridButtonOnTop,u.headerGrouping=ue.defaultHeaderGrouping,u.headerFilterable=ue.defaultGridHeaderFilterable,u.defaultEditWidth=200,u.defaultEditWidthFile=250,u.expandedDetailKeys=[],u.changed=new t.EventEmitter,u.imported=new t.EventEmitter,u.selectedKeys=[],u.forSelectableCheckSelectedCount=0,u.sortDescriptor=[],u.filterDescriptor={logic:"and",filters:[]},u.multiSelectComponent=null,u.columnSettingPhpCode=null,u.virtualColumnVar=!1,u.isSelectable=null,u.isCheckSelectable=null,u.isDeletable=null,u.deletableCheckMessage=null,u.isEditable=null,u.isFieldEditable=null,u.isHeaderAllCheckChangeable=null,u.editableCheckMessage=null,u.selectableCheckMessage=null,u.doubleClicked=!1,u.formSettingList=[],u.formSettingSelected=null,u.formSettingSelectedSave=null,u.formSettingVisible=!1,u.formSettingMode=0,u.formSettingInWorkspace=!1,u.formSettingSelectedSaveDefault="DEFAULT",u.showSearchPane=!1,u.searchRequireErrorFocusField=null,u.singleSelectMode=!1,u.currentInCellEditSerial=0,u.bulkUpdating=!1,u.bulkCoping=!1,u.bulkUpdateSelectedItems={},u.expandDetailsBy=function(e){return e.serial},u.rowCallback=function(e){if(u.cellClassFunction){var t=u.cellClassFunction(null,e.dataItem);if(t){var n={};return n[t]=!0,n}}return{}},u.searchPaneTitle=i.define.lib.searchPaneTitle,u.editableCheckMessage=i.define.lib.editableCheckMessage,u.deletableCheckMessage=i.define.lib.deletableCheckMessage,u.selectableCheckMessage=i.define.lib.selectableCheckMessage,u}return oe(i,n),Object.defineProperty(i.prototype,"virtualColumns",{get:function(){return this.virtualColumnVar},set:function(e){this.defaultColumnWidth=150,this.virtualColumnVar=e},enumerable:!1,configurable:!0}),i.removeArrayItem=function(e,t){var n=e.indexOf(t);n>-1&&e.splice(n,1)},i.addArrayItem=function(e,t){e.includes(t)||e.push(t)},i.prototype.ngOnInit=function(){this.showFooterBar||null===this.bottomDistance||(this.bottomDistance=5),this.initFormHeight()||this.bottomDistance||(this.formHeight=null)},i.prototype.openMultiSelectDetail=function(e){this.multiSelectComponent=e},i.prototype.onFieldValueChange=function(t,n,i){var r=this,a=this.data.findIndex((function(e){return e.serial===n}));this.changed.emit({name:i,index:a,value:t.value,listItem:t.listItem});var l=this.define.fieldByNames[i];l&&l.editMode&&l.type===e.FieldType.Boolean&&setTimeout((function(){r.isCheckSelectable&&!r.isCheckSelectable(i,r.data[a])&&(r.data[a][i]=!1),r.updateEditModeCheck(i)}),200)},i.prototype.init=function(){this.loadDefine()},i.prototype.fieldEditable=function(t,n,i){if(void 0===i&&(i=!1),!this.editCache[t].edit||this.enableMasterDetail&&this.status!==e.FormStatus.Insert&&!i)return!1;if(this.define.inCellEditField){if(n.name===this.define.inCellEditField){if(this.isFieldEditable){var r=this.data.find((function(e){return e.serial===t}));return this.isFieldEditable(n.name,r)}return!0}return!1}var a=n.update&&this.status===e.FormStatus.Edit&&(n.selectedEditable||void 0===n.selectedEditable)||n.insert&&(this.status===e.FormStatus.Copy||this.status===e.FormStatus.Insert);if(this.isFieldEditable&&a){r=this.data.find((function(e){return e.serial===t}));return this.isFieldEditable(n.name,r)}return a},i.prototype.loadDefine=function(t,n){var i=this;if(void 0===t&&(t=null),void 0===n&&(n=null),this.apiUrl){var r=this.state.isBackward()||this.state.isHaveBackward();this.dataLoading=!0,this.searchCacheSearchPane={},this.api.defineWidthParam(this.apiUrl,this.defineWithData&&!r,this.params,(function(a,l,o){if(i.dataLoading=!1,200===a){var s=o.define;s.sortInfo||(s.sortInfo={}),s.searchInfo||(s.searchInfo={}),i.data=[];var d=i.define?i.define.optionsMap:null;s.optionsMap=d||{},i.define=s,i.visibleFields=[],i.searchFields=[],i.searchOnlyFields=[],s.fields.forEach((function(e){e.hidden||i.visibleFields.push(e),e.searchable&&i.searchFields.push(e),e.searchOnly&&i.searchOnlyFields.push(e)})),i.columnTableFields=m.process(i.visibleFields,i.columnTableState),i.defineLoaded(),i.defined.emit(),t&&t(),i.define.fields.forEach((function(t){t.type!==e.FieldType.Date&&t.type!==e.FieldType.DateTime&&t.type!==e.FieldType.Time||!t.defaultValue||(t.defaultValue=pe.toDatetime(t.defaultValue))})),i.filterDescriptor.filters=[],i.loadSearchCache(),i.state.applyState(s),i.updateState(),i.loadFieldGroups(),i.view=null===i.view?i.define.gridView:i.view,i.wrapHeader=null===i.wrapHeader?i.define.gridWrapHeader:i.wrapHeader,i.inCellEditable=null===i.inCellEditable?i.define.gridInCellEditable:i.inCellEditable,null===i.headerFilterable&&(i.headerFilterable=i.define.gridHeaderFilterable),null===i.selection&&(i.selection=i.define.gridSelection),null===i.autoSize&&(i.autoSize=i.define.gridAutosize),null===i.headerResizable&&(i.headerResizable=i.define.gridHeaderResizable),null===i.excelColumnSelectable&&(i.excelColumnSelectable=i.define.gridExcelColumnSelectable),i.formatFormSettingList(),i.setSearchRequireMark(),i.checkSearchRequire(!1)?(i.defineWithData&&!r?(i.loadWithData(o.data),i.doLoadSuccess(n)):i.load(n),i.showSearchPane=!1):(i.resize(),i.showSearchPane=!0)}else i.error(l)}))}},i.prototype.checkSearchRequire=function(e){void 0===e&&(e=!0);var t=this.getSearchRequireErrorMessage();if(0===t.length)return!0;var n=t.join("\n");return e&&(alert(n),this.focusControl("search_field_"+this.searchRequireErrorFocusField)),!1},i.prototype.getSearchRequireErrorMessage=function(){var e=this,t=[];return this.define.searchRequireGroup&&0!==Object.keys(this.define.searchRequireGroup).length?(this.searchRequireErrorFocusField=null,Object.keys(this.define.searchRequireGroup).forEach((function(n){if(e.define.searchInfo&&0!==Object.keys(e.define.searchInfo).length){var i=e.define.searchRequireGroup[n],r=!1;i.forEach((function(t){var n=e.define.searchInfo[t];n&&(null!==n.value1&&""!==n.value1||null!==n.value2&&""!==n.value2||null!==n.values&&n.values.length>0)&&(r=!0)})),r||(!e.searchRequireErrorFocusField&&e.define.searchRequireGroup[n].length>0&&(e.searchRequireErrorFocusField=e.define.searchRequireGroup[n][0]),t.push(n))}else!e.searchRequireErrorFocusField&&e.define.searchRequireGroup[n].length>0&&(e.searchRequireErrorFocusField=e.define.searchRequireGroup[n][0]),t.push(n)})),t):t},i.prototype.setSearchRequireMark=function(){var e=this;if(this.define.searchRequireGroup&&0!==Object.keys(this.define.searchRequireGroup).length){var t=0;Object.keys(this.define.searchRequireGroup).forEach((function(n){var i=e.define.searchRequireGroup[n];if(i.length>1)t++,i.forEach((function(n){var i=e.define.fieldByNames[n];i&&(i.searchRequireMark="*<sup>"+t+"</sup>")}));else if(1===i.length){var r=e.define.fieldByNames[i[0]];r&&(r.searchRequireMark="*")}}))}},i.prototype.loadSearchOptions=function(){var e=this;this.define.fields.forEach((function(t){if(t.listName&&(e.define.optionsMap||(e.define.optionsMap={}),!e.define.optionsMap[t.listName])){var n=e.getListOptionsDefaultParams(t);e.api.getListValues(t.listName,t.listFixParam,n,null,null,(function(n){t.tree?(e.define.optionsMap[t.listName]=n,e.searchOptions[t.name]=pe.expandTreeListValues(e.define.optionsMap[t.listName])):e.define.optionsMap[t.listName]=pe.toKendoListValues(n)}))}}))},i.prototype.loadSearchCache=function(){var e=this;this.define.fields.forEach((function(t){e.searchCache[t.name]=e.createSearchCacheField(t),e.searchCacheSearchPane[t.name]=e.createSearchCacheField(t)}))},i.prototype.footerAvailable=function(){var e,t;if(!this.define.summaries)return!1;if(!this.data||0===this.data.length)return!1;try{for(var n=se(Object.keys(this.define.summaries)),i=n.next();!i.done;i=n.next()){var r=i.value,a=this.define.fieldByNames[r];if(a&&a.show&&!a.hidden)return!0}}catch(t){e={error:t}}finally{try{i&&!i.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}return!1},i.prototype.createSearchCacheField=function(t){var n;if(t.listValues||t.listName)n=t.autocomplete?e.SearchType.Contains:e.SearchType.In;else switch(t.type){case e.FieldType.Date:case e.FieldType.DateTime:case e.FieldType.Time:case e.FieldType.Int:case e.FieldType.Float:n=e.SearchType.In;break;case e.FieldType.Boolean:n=e.SearchType.Equal;break;default:n=e.SearchType.Contains}return{name:t.name,type:n,value1:null,value2:null,values:[],searchNull:!1}},i.prototype.checkAll=function(e){var t=this;if(void 0===e&&(e=!1),e){if(this.data&&this.data.length>0){var n=[];this.data.forEach((function(e){t.isSelectable&&!t.isSelectable(e)||n.push(e.serial)})),this.selectedKeys=n}}else this.selectedKeys=[]},i.prototype.checkAt=function(e){if(this.data&&this.data.length>e&&e>-1){var t=this.data[e];this.isSelectable&&!this.isSelectable(t)||this.selectedKeys.includes(t.serial)||this.selectedKeys.push(t.serial)}},i.prototype.doLoadSuccess=function(t){var n=this;void 0===t&&(t=null),this.editModeFieldCheck={},this.editModeFieldIndeterminate={},this.dataLoading=!1,this.updateEditCache(),this.status=e.FormStatus.View,this.checkAll(!1),this.loadSearchOptions(),this.dataLoaded(),this.loaded.emit(),this.loadGridData(),this.define.fields.forEach((function(t){t.type===e.FieldType.Boolean&&n.updateEditModeCheck(t.name)})),setTimeout((function(){n.resize(),n.fitSystemColumns(),n.autoSize?(n.fitColumns(),setTimeout((function(){n.updateFitColumnWidth(!1),n.fitHeaderHeight()}),500)):setTimeout((function(){n.fitHeaderHeight()}),500),t&&t()}),200)},i.prototype.resetOptionsMap=function(){var e=this,t=[];this.define.fields.forEach((function(n){n.listParam&&Object.keys(e.define.optionsMap).forEach((function(e){!0===e.startsWith(n.name)&&t.push(e)}))})),t.forEach((function(t){delete e.define.optionsMap[t]}))},i.prototype.load=function(e){var t=this;void 0===e&&(e=null),this.checkSearchRequire(!1)?(this.dataLoading=!0,this.resetOptionsMap(),n.prototype.load.call(this,(function(){t.doLoadSuccess(e)})),this.showSearchPane=!1):this.showSearchPane=!0},i.prototype.startEdit=function(t,n){this.cancel(),this.clearEditCache(),this.checkAll(!1),!this.isSelectable||this.isSelectable(this.editCache[t].data)?(this.clearFileInput(t),this.editCache[t].edit=!0,this.status=e.FormStatus.Edit,i.addArrayItem(this.selectedKeys,t),this.beforeUpdate&&!this.beforeUpdate(this,this.getCheckedData())||(this.openMasterDetail(),n.ctrlKey&&this.priorInlineUpdate||!n.ctrlKey&&!this.priorInlineUpdate?(this.detailModalTitle=this.updateDialogTitle,this.detailModalIcon="edit",this.openDetailModal(t)):this.fitColumns(!0))):this.selectableCheckMessage&&alert(this.selectableCheckMessage)},i.prototype.startEditMultiWithEvent=function(e){e.ctrlKey?this.visibleEditColumnPane=!0:e.shiftKey?this.startBulkUpdate():this.startEditMulti()},i.prototype.startCopyMultiWithEvent=function(e){e.shiftKey?this.startBulkUpdate(!0):this.startCopyMulti()},i.prototype.startEditMulti=function(){var t=this;if(this.define.inCellEditField=null,this.checkSelected()){if(this.isEditable){var n=this.getCheckedData(),i=!0;if(n.forEach((function(e){if(!t.isEditable(e))return alert(t.editableCheckMessage),void(i=!1)})),!i)return}this.clearEditCache(),this.selectedKeys.forEach((function(e){var n=+e;t.editCache[n].edit=!0,t.clearFileInput(n)})),this.beforeUpdate&&!this.beforeUpdate(this,this.getCheckedData())||(this.status=e.FormStatus.Edit,this.openMasterDetail(),this.autoSize&&(this.fitColumns(!0),setTimeout((function(){t.updateFitColumnWidth(!1,!0),t.fitHeaderHeight(),t.focusFirstControl()}),200)))}else this.warning(this.lang.define.lib.selectRowMessage)},i.prototype.startCopy=function(e){this.define.inCellEditField=null,this.selectedKeys=[e],this.startCopyMulti()},i.prototype.startCopyMulti=function(){var t=this;if(this.checkSelected()){this.clearEditCache();var n=this.serial()+1,i=0,r=[];this.selectedKeys.forEach((function(e){t.createCopyItem(e,n),r.push(n),n++,i++})),this.loadGridData(),this.selectedKeys=r,this.openMasterDetail(),this.status=e.FormStatus.Copy,1!==i||this.enableMasterDetail?(this.ngZone.onStable.asObservable().pipe(d.take(1)).subscribe((function(){t.grid.focusCell(t.data.length*(t.enableMasterDetail?2:1)-1,2)})),setTimeout((function(){t.focusFirstControl()}),200)):(this.detailModalTitle=this.copyDialogTitle,this.detailModalIcon="copy",this.openDetailModal(n-1))}else this.warning(this.lang.define.lib.selectRowMessage)},i.prototype.removeNewRow=function(){this.data=this.data.filter((function(e){return void 0===e.new||!e.new})),this.loadGridData()},i.prototype.addNewRow=function(e,t){void 0===e&&(e=null),void 0===t&&(t=!1);var n=this.serial()+1,r={new:!0,serial:n};return this.initDefaultValue(r),e&&Object.entries(e).forEach((function(e){var t=de(e,2),n=t[0],i=t[1];r[n]=i})),t&&i.addArrayItem(this.selectedKeys,n),this.editCache[n]={edit:t,delete:!1,data:Object.assign({},r)},this.data.push(r),this.loadGridData(),n},i.prototype.startInsert=function(t){if(void 0===t&&(t=null),this.define.inCellEditField=null,this.checkAll(!1),this.clearEditCache(),!this.beforeInsert||this.beforeInsert(this)){this.status=e.FormStatus.Insert;var n=this.addNewRow(null,!0);t&&t.ctrlKey||(this.detailModalTitle=this.addDialogTitle,this.detailModalIcon="add",this.openDetailModal(n))}},i.prototype.startBulkUpdate=function(t){void 0===t&&(t=!1),this.define.inCellEditField=null,this.status=e.FormStatus.Insert;var n=this.addNewRow(null,!0);this.detailModalIcon="add",this.bulkUpdateSelectedItems={},t?(this.detailModalTitle="Bulk copy",this.bulkCoping=!0):(this.detailModalTitle="Bulk update",this.bulkUpdating=!0),this.openDetailModal(n)},i.prototype.startMultiInsert=function(t){if(void 0===t&&(t=1),this.define.inCellEditField=null,this.checkAll(!1),this.clearEditCache(),!this.beforeInsert||this.beforeInsert(this)){this.status=e.FormStatus.Insert;for(var n=0;n<t;n++)this.addNewRow(null,!0)}},i.prototype.cancelEdit=function(e){this.cancel()},i.prototype.cancel=function(t){var n=this;void 0===t&&(t=!0),t&&this.define&&(this.define.inCellEditField=null),this.clearValidate(),Object.keys(this.editCache).forEach((function(e){var t=+e,i=n.data.findIndex((function(e){return e.serial===t}));n.editCache[t].edit&&i>-1&&(n.copyEditModelFieldEditCache(t,i),pe.objectAssign(n.data[i],n.editCache[t].data),n.editCache[t].edit=!1)}));for(var r=this.data.length-1;r>=0&&!0===this.data[r].new;)delete this.editCache[this.data[r].serial],i.removeArrayItem(this.selectedKeys,this.data[r].serial),r--;this.selection||this.checkAll(!1),this.removeNewRow(),this.selection||(this.selectedKeys=[]),this.expandedDetailKeys=[],!this.autoSize||this.status!==e.FormStatus.Edit||this.visibleDetailModal||t||(this.fitColumns(),setTimeout((function(){n.updateFitColumnWidth(!1),n.fitHeaderHeight()}),200)),this.status=e.FormStatus.View},i.prototype.viewDetail=function(e){this.detailModalTitle=this.viewDialogTitle,this.detailModalIcon="align-justify",this.enableMasterDetail?this.expandedDetailKeys=[e]:this.openDetailModal(e)},i.prototype.saveBulk=function(t,n){var i=this;void 0===n&&(n=null);var r=this.getCheckedData();this.message.startLoading();var a=q;this.bulkCoping&&(a=U),this.api.action(this.apiUrl,a,this.define,{bulkUpdateSelectedItems:JSON.stringify(this.bulkUpdateSelectedItems)},r,(function(t,r,a){i.message.stopLoading(),t!==e.ServiceCode.Success?alert(r):(i.currentIndex=null,i.visibleDetailModal=!1,i.load()),n&&n(t,r)}))},i.prototype.save=function(t,i){var r=this;void 0===t&&(t=null),void 0===i&&(i=null),null!=t||this.checkSelected()?n.prototype.save.call(this,t,(function(n,a){n===e.ServiceCode.Success&&(r.changeToViewAfterUpdate&&(null==t?r.checkAll(!1):(r.expandedDetailKeys=[],r.selectedKeys=[t]),null!==r.currentIndex&&(r.currentIndex=null,r.visibleDetailModal=!1)),r.data.forEach((function(e){e.new&&delete e.new})),r.fitSystemColumns()),i&&i(n,a)})):this.warning(this.lang.define.lib.selectRowMessage)},i.prototype.excel=function(){var t=this;this.dataLoading=!0,this.api.excel(this.apiUrl,this.define,this.params,(function(n,i){t.dataLoading=!1,n!==e.ServiceCode.Success&&alert(i)}))},i.prototype.delete=function(t){var i=this;if(void 0===t&&(t=null),null!=t||this.checkSelected()){if(null==t)this.clearEditCache(!0),this.selectedKeys.forEach((function(e){var t=+e;i.selectedKeys.includes(t)&&(i.editCache[t].delete=!0)}));else{if(this.isSelectable&&!this.isSelectable(this.editCache[t].data))return void(this.selectableCheckMessage&&alert(this.selectableCheckMessage));this.selectedKeys=[],this.selectedKeys.push(t)}if(!this.beforeDelete||this.beforeDelete(this,this.getCheckedData())){if(this.isDeletable){var r=this.getCheckedData(),a=!0;if(r.forEach((function(e){if(!i.isDeletable(e))return alert(i.deletableCheckMessage),void(a=!1)})),!a)return}this.message.confirm(this.lang.define.lib.deleteConfirmMessage,(function(r){r?n.prototype.delete.call(i,t,(function(t,n){t===e.ServiceCode.Success&&i.load()})):i.selection||null==t||(i.selectedKeys=[])}))}}else this.warning(this.lang.define.lib.selectRowMessage)},i.prototype.checkSelected=function(){return this.selectedKeys.length>0},i.prototype.saveSetting=function(){var e=this;this.dataLoading=!0;var t=this.formSettingInWorkspace,n=this.define.formSetting&&this.define.formSetting[this.formSettingSelectedSave];n&&(t=this.define.formSetting[this.formSettingSelectedSave].in_workspace),this.api.setting(this.apiUrl,this.define,!1,"save",this.formSettingSelectedSave,t,(function(t,i){e.dataLoading=!1,200!==t?e.error(i):(e.formSettingVisible=!1,n||e.loadDefine())}))},i.prototype.loadSetting=function(){var e=this;this.dataLoading=!0,this.api.setting(this.apiUrl,this.define,!1,"load",this.formSettingSelectedSave,null,(function(t,n){e.dataLoading=!1,200!==t?e.error(n):(e.formSettingVisible=!1,e.loadDefine())}))},i.prototype.deleteSetting=function(){var e=this;this.dataLoading=!0,this.api.setting(this.apiUrl,this.define,!1,"delete",this.formSettingSelectedSave,null,(function(t,n){e.dataLoading=!1,200!==t?e.error(n):(e.formSettingVisible=!1,e.loadDefine())}))},i.prototype.resetSetting=function(e){var t=this;void 0===e&&(e=null),this.dataLoading=!0,this.api.setting(this.apiUrl,this.define,!0,null,null,null,(function(n,i){t.dataLoading=!1,200!==n?t.error(i):t.loadDefine((function(){e&&e()}))}))},i.prototype.edit=function(){this.startEditMulti()},i.prototype.getCheckedData=function(e){var t=this;void 0===e&&(e=!1);var n=[];return this.selectedKeys.forEach((function(e){var i=+e,r=t.data.findIndex((function(e){return e.serial===i}));n.push(t.data[r])})),e?this.toServerFormat(n):n},i.prototype.openDetailModal=function(t){this.enableMasterDetail&&this.status!==e.FormStatus.Insert||(this.currentIndex=this.data.findIndex((function(e){return e.serial===t})),this.visibleDetailModal=!0)},i.prototype.ngAfterViewInit=function(){this.loadUserFields(),this.cd.detectChanges()},i.prototype.gridSelectionKey=function(e){return e.dataItem.serial},i.prototype.columnVisibilityChange=function(e){var t=this;e.columns.forEach((function(e){var n=e.field;t.define.fieldByNames[n]&&(t.define.fieldByNames[n].show=!e.hidden)}))},i.prototype.columnResize=function(e){var t=this;this.headerResizable?(e.forEach((function(e){var n=e.column.field;n&&t.define.fieldByNames[n]&&(t.define.fieldByNames[n].locked?e.column.width=e.oldWidth:t.define.fieldByNames[n].width=e.column.width)})),this.fitHeaderHeight()):setTimeout((function(){e.forEach((function(e){e.newWidth!==e.oldWidth&&(e.column.width=e.oldWidth)}))}),500)},i.prototype.columnSwap=function(e,t,n){if(e.groupName){if(-1===(l=this.define.fields.findIndex((function(t){return t.groupName===e.groupName}))))return;for(;l>=0&&this.define.fields[l-1].groupName===e.groupName;)l-=1;for(var i=1;l+i<this.define.fields.length&&this.define.fields[l+i].groupName===e.groupName;)i+=1;var r=this.grid.columns.find((function(e,t){return t===n}));o=void 0;if(-1===(o=r.isColumnGroup?this.define.fields.findIndex((function(e){return e.groupName===r.title})):this.define.fields.findIndex((function(e){return e.name===r.field}))))return;if(l>o)for(var a=0;a<i;a++)h.moveItemInArray(this.define.fields,l+a,o+a);else for(a=0;a<i;a++)h.moveItemInArray(this.define.fields,l,o)}else{var l;if(-1===(l=this.define.fields.findIndex((function(t){return t.name===e.name}))))return;var o=l,s=n-t,d=1;for(s<0&&(d=-1,s=-s);s>0;)o+=d,!this.define.fields[o].hidden&&this.define.fields[o].show&&s--;h.moveItemInArray(this.define.fields,l,o)}this.loadFieldGroups()},i.prototype.columnReorder=function(t){var n=t.column.field;if(n){var i=this.define.fields.find((function(e){return e.name===n}));this.columnSwap(i,t.oldIndex,t.newIndex)}else{var r=t.column.title;i=this.define.fields.find((function(e){return e.groupName===r}));this.columnSwap(i,t.oldIndex,t.newIndex)}t.preventDefault(),this.autoSize&&this.fitColumns(this.status===e.FormStatus.Edit)},i.prototype.sortChange=function(t){t.length<1||this.define.fieldByNames[t[0].field]&&this.define.fieldByNames[t[0].field].sortable&&!this.define.fieldByNames[t[0].field].choices&&(this.sortDescriptor=t,this.define.sortInfo={},"asc"===t[0].dir?this.define.sortInfo[t[0].field]=e.SortType.Asc:"desc"===t[0].dir&&(this.define.sortInfo[t[0].field]=e.SortType.Desc),this.load())},i.prototype.filterChange=function(e){var t=this,n=[];e.filters.forEach((function(e){var t=e;t.filters&&t.filters[0]&&n.push(t.filters[0].field)}));var i=[];this.filterDescriptor.filters.forEach((function(e){var t=e;t.filters&&t.filters[0]&&i.push(t.filters[0].field)})),this.filterDescriptor=e,i.forEach((function(e){n.includes(e)||(t.searchCache[e]=t.createSearchCacheField(t.define.fieldByNames[e]))}));var r={};n.forEach((function(e){r[e]=t.searchCache[e]})),Object.keys(this.searchCacheSearchPane).forEach((function(e){t.define.fieldByNames[e].searchOnly&&pe.searchCacheActive(t.searchCacheSearchPane[e])&&(r[e]=t.searchCacheSearchPane[e])})),this.searchBySearchPane=!1,this.define.searchInfo=r,this.define.pageIndex=1,this.load()},i.prototype.onPageChange=function(e){this.define.pageSize=e.take,this.define.pageIndex=e.skip/this.define.pageSize+1,this.load()},i.prototype.groupChange=function(e){var t=this;e.forEach((function(e){var n=t.define.fieldByNames[e.field];(n.listName&&!n.autocomplete||n.listValues)&&(e.field=pe.complexFieldName(e.field)+".text")})),this.groups=e,this.loadGridData()},i.prototype.onResize=function(e){var t=this;this.resize(),setTimeout((function(){t.showSearchPane||(t.autoSize?(t.fitColumns(),setTimeout((function(){t.updateFitColumnWidth(!1),t.fitHeaderHeight()}),200)):t.fitSystemColumns())}),100)},i.prototype.onImported=function(){this.imported.emit()},i.prototype.settingCommandClick=function(e){e.onclick&&e.onclick()},i.prototype.loadSettingCommands=function(){var t=this;this.settingCommands=[{icon:"table",text:this.lang.define.lib.fitColumn,onclick:function(){t.fitColumns(t.status===e.FormStatus.Edit),setTimeout((function(){t.updateFitColumnWidth(),t.fitHeaderHeight()}),500)},setting:!0},{icon:"download",text:this.lang.define.lib.loadSetting,onclick:function(){t.formSettingMode=0,t.formSettingSelectedSave=t.formSettingSelected,t.formSettingVisible=!0},setting:!0},{icon:"save",text:this.lang.define.lib.saveSetting,onclick:function(){t.formSettingMode=1,t.formSettingSelectedSave=t.formSettingSelected,t.formSettingVisible=!0},setting:!0},{icon:"reset",text:this.lang.define.lib.resetSetting,onclick:function(){t.resetSetting()},setting:!0},{icon:"clear",text:this.lang.define.lib.clearFilter,onclick:function(){t.define.fields.forEach((function(e){t.searchCacheSearchPane[e.name]=t.createSearchCacheField(e)})),t.searchBySearchPane=!1,t.filterDescriptor.filters=[],t.define.searchInfo={},t.define.pageIndex=1,t.load()},setting:!0}]},i.prototype.columnTableStateChange=function(e){this.columnTableState=e,this.columnTableFields=m.process(this.visibleFields,this.columnTableState)},i.prototype.editModeFieldCheckClick=function(e){var t=this,n=!this.editModeFieldCheck[e],i=this.define.fieldByNames[e];this.editModeFieldIndeterminate[e]=!1,this.data.forEach((function(r){i.editMode&&(t.isHeaderAllCheckChangeable?t.isHeaderAllCheckChangeable(e,r)&&(r[e]=n):!t.isCheckSelectable||t.isCheckSelectable(e,r)?r[e]=n:r[e]=!1)}))},i.prototype.updateEditModeCheck=function(e){var t,n,i=0,r=0,a=this.define.fieldByNames[e];try{for(var l=se(this.data),o=l.next();!o.done;o=l.next()){var s=o.value;a.editMode&&(this.isCheckSelectable&&!this.isCheckSelectable(e,s)||(s[e]?i++:r++))}}catch(e){t={error:e}}finally{try{o&&!o.done&&(n=l.return)&&n.call(l)}finally{if(t)throw t.error}}i>0&&0===r?(this.editModeFieldIndeterminate[e]=!1,this.editModeFieldCheck[e]=!0):r>0&&0===i?(this.editModeFieldIndeterminate[e]=!1,this.editModeFieldCheck[e]=!1):i>0&&r>0?(this.editModeFieldIndeterminate[e]=!0,this.editModeFieldCheck[e]=!1):(this.editModeFieldIndeterminate[e]=!1,this.editModeFieldCheck[e]=!1)},i.prototype.openColumnSetting=function(e){e.ctrlKey?this.columnSettingPhpCode=this.createColumnSettingPhpCode():this.columnSettingPhpCode=null,this.visibleColumnPanel=!0},i.prototype.pushFitColumn=function(t,n,i){var r=this.define.fields.find((function(e){return e.name===n.field}));if(r){if(this.define.inCellEditField===r.name)return;if(r.type===e.FieldType.Text)return void(r.width?r.width:r.width=400);if(r.type===e.FieldType.Date){if(r.width)return;if(i)r.defaultWidth=ue.dateFieldWidthEditMode;else{var a=r.showWeekDay?ue.dateTimeWeekWidth:0;r.defaultWidth=ue.dateFieldWidth+a}return}if(r.width&&(!i||r.type!==e.FieldType.File))return;if(i&&(r.listName||r.listValues||r.type===e.FieldType.String))return void(r.defaultWidth=this.defaultEditWidth)}t.push(n)},i.prototype.fitColumns=function(e){var t=this;if(void 0===e&&(e=!1),this.isVisible()&&this.grid&&this.grid.columns){var n=[];this.grid.columns.forEach((function(i){i.title&&""!==i.title&&(i.isColumnGroup?i.children.forEach((function(i){t.pushFitColumn(n,i,e)})):t.pushFitColumn(n,i,e))})),this.ngZone.onStable.asObservable().pipe(d.take(1)).subscribe((function(){t.grid.autoFitColumns(n);for(var e=0,i=null,r=0;r<4;r++)if(r<t.grid.columns.length){var a=t.grid.columns.get(r);a.field||(e+=a.width)}if(t.define.fields.forEach((function(n){if(n.show&&!n.hidden)if("100%"!==n.width){var r=t.grid.columns.find((function(e){return e.field===n.name}));r&&(e+=r.width,r.width>500&&!n.width?e+=500:e+=r.width)}else i=n})),i){var l=document.querySelector(".k-grid-aria-root");if(l){var o=l.getBoundingClientRect().width;if(o>e+200){var s=t.grid.columns.find((function(e){return e.field===i.name}));s&&t.ngZone.onStable.asObservable().pipe(d.take(1)).subscribe((function(){s.width=o-e-15}))}}}}))}},i.prototype.updateFieldWidth=function(t,n,i){void 0===n&&(n=!0),void 0===i&&(i=!1);var r=t.field,a=this.define.fields.find((function(e){return e.name===r}));if(i=i&&(!this.define.inCellEditField||this.define.inCellEditField===r),a){if(i||(a.defaultWidth=t.width),a.width)return void(i&&(a.listName||a.listValues)&&t.width<ue.listBoxMinWidth&&(t.width=ue.listBoxMinWidth));if(i&&!a.width&&(a.listName||a.listValues||a.type===e.FieldType.String))return void(t.width=this.defaultEditWidth);t.width>500?(a.width=500,t.width=500):i&&(a.listName||a.listValues)?t.width<ue.listBoxMinWidth&&(t.width=ue.listBoxMinWidth):a.width&&t.width>a.width?t.width=a.width:n&&!this.autoSize&&(a.width=t.width)}},i.prototype.updateFitColumnWidth=function(e,t){var n=this;void 0===e&&(e=!0),void 0===t&&(t=!1),this.grid.columns.forEach((function(i){i.isColumnGroup?i.children.forEach((function(i){n.updateFieldWidth(i,e,t)})):n.updateFieldWidth(i,e,t)}))},i.prototype.fitSystemColumns=function(){var e=this;this.isVisible()&&this.grid&&this.grid.columns&&this.ngZone.onStable.asObservable().pipe(d.take(1)).subscribe((function(){if(e.columnSelection&&e.grid.autoFitColumn(e.columnSelection),e.columnSystem&&e.grid.autoFitColumn(e.columnSystem),e.columnInlines){var t=0;e.columnInlines.forEach((function(n){var i,r,a=0;try{for(var l=se(e.inlineItems),o=l.next();!o.done;o=l.next()){if("left"===o.value.position){if(a===t)break;a++}}}catch(e){i={error:e}}finally{try{o&&!o.done&&(r=l.return)&&r.call(l)}finally{if(i)throw i.error}}e.inlineItems[a].width||e.grid.autoFitColumn(n),t++}))}if(e.rightColumnInlines){var n=0;e.rightColumnInlines.forEach((function(t){var i,r,a=0;try{for(var l=se(e.inlineItems),o=l.next();!o.done;o=l.next()){if("right"===o.value.position){if(a===n)break;a++}}}catch(e){i={error:e}}finally{try{o&&!o.done&&(r=l.return)&&r.call(l)}finally{if(i)throw i.error}}e.inlineItems[a].width||e.grid.autoFitColumn(t),n++}))}}))},i.prototype.getListOptionsDefaultParams=function(e){var t=this;if(e.listParam){if(Array.isArray(e.listParam)){var n=[];return e.listParam.forEach((function(e){var i=t.define.fieldByNames[e].defaultValue;i?n.push(i):n.push(-1)})),n}var i=this.define.fieldByNames[e.listParam].defaultValue;return i||-1}return null},i.prototype.updateState=function(){var t=this;Object.keys(this.define.searchInfo).forEach((function(e){t.searchCache[e]=t.define.searchInfo[e],t.filterDescriptor.filters.push({logic:"and",filters:[{field:e,operator:"contains",value:"@"}]})})),this.sortDescriptor=[],Object.keys(this.define.sortInfo).forEach((function(n){t.define.sortInfo[n]===e.SortType.Desc?t.sortDescriptor.push({field:n,dir:"desc"}):t.sortDescriptor.push({field:n,dir:"asc"})}))},i.prototype.loadGridData=function(){this.gridData=m.process(this.data,{group:this.groups})},i.prototype.createCopyItem=function(e,t){var n=this.data.findIndex((function(t){return t.serial===e})),i={};pe.objectAssign(i,this.data[n]),this.initDefaultValue(i),this.define.fields.forEach((function(e){e.editable||e.defaultValue||e.key||delete i[e.name]})),i.new=!0,i.serial=t,this.editCache[t]={edit:!0,delete:!1,data:Object.assign({},i)},this.data.push(i)},i.prototype.createColumnSettingPhpCode=function(){var e="\n",t=[],n=[],i=[],r=[];return this.define.fields.forEach((function(a){t.push(a.name),a.show&&n.push(a.name),a.excel&&i.push(a.name),a.locked&&r.push(a.name),a.width&&(e=e+'$this->setWidth("'+a.name+'",'+a.width+");\n")})),e=(e=e+'\n$this->setOrder("'+t.join(",")+'");\n')+'\n$this->setShow("'+n.join(",")+'");\n',r.length>0&&(e=e+'\n$this->setLocked("'+r.join(",")+'");\n'),i.length>0&&(e=e+'\n$this->setExcel("'+i.join(",")+'");\n'),e+="\n\n"},i.prototype.openMasterDetail=function(){var e=this;this.enableMasterDetail&&(this.expandedDetailKeys=[],this.selectedKeys.forEach((function(t){var n=+t;e.expandedDetailKeys.push(n)})))},i.prototype.cellClass=function(e){if(this.cellClassFunction){var t=this.cellClassFunction(e,null);if(t){var n={};return n[t]=!0,n}}return{}},i.prototype.wrapCaption=function(t){var n=t.caption.replace("\n","<br>");if(!this.wrapHeader||!this.charWidth)return n;var i=t.width,r=0;if(t.type!==e.FieldType.Date||i||(i=ue.dateFieldWidth),!i)return n;var a=t.caption.split(" "),l=[],o="";return a.forEach((function(e){""===o?o=e:10*(o+" "+e).length>i-30?(o.length>r&&(r=o.length),l.push(o),o=e):o=o+" "+e})),o.length>r&&(r=o.length),l.push(o),l.join("<br>")},i.prototype.fitHeaderHeight=function(){this.wrapHeader},i.prototype.cellClickHandler=function(t){var n=this,i=t.column,r=t.dataItem,a=t.originalEvent;if((this.doubleClicked||a.ctrlKey)&&(this.doubleClicked=!1,this.inCellEditable&&this.define.optionUpdate&&(this.define.inCellEditField||this.status===e.FormStatus.View))){var l=i.field;if((!this.isFieldEditable||this.isFieldEditable(l,r))&&l){var o=this.define.fieldByNames[l];if(o.editMode)return;if(o&&o.editable&&o.update){if(this.isEditable&&!this.isEditable(r))return;this.selectedKeys=[r.serial],this.currentInCellEditSerial=r.serial,this.define.inCellEditField=l,this.cancel(!1),this.updateFitColumnWidth(!1,!0),o.type===e.FieldType.Date?o.defaultWidth=ue.dateFieldWidthEditMode:o.type===e.FieldType.DateTime&&(o.defaultWidth=ue.dateTimeFieldWidthEditMode),this.status=e.FormStatus.Edit,this.editCache[r.serial].edit=!0,setTimeout((function(){n.focusControl(l)}),200)}}}},i.prototype.dblClickEvent=function(){this.doubleClicked=!0},i.prototype.formatFormSettingList=function(){var e=this;this.define.formSetting||(this.define.formSetting={}),this.formSettingList=[],this.formSettingSelected=null,Object.keys(this.define.formSetting).forEach((function(t){e.formSettingList.push({value:t,text:t}),!e.formSettingSelected&&e.define.formSetting[t].default_flag&&(e.formSettingSelected=t)}))},i.prototype.doFormSettingAction=function(e){if(void 0===e&&(e=!1),!this.formSettingSelectedSave||""===this.formSettingSelectedSave){if(e||0===this.formSettingMode)return alert("Please input setting name"),void this.focusControl("setting_name_component");this.formSettingSelectedSave=this.formSettingSelectedSaveDefault}if(e){if(!confirm("Are you sure delete this setting?"))return;this.deleteSetting()}else 0===this.formSettingMode?this.loadSetting():this.saveSetting()},i.prototype.selectionChange=function(e){var t=this;e.selectedRows.length>0?(e.selectedRows.forEach((function(e){var n=e.dataItem;if(t.isSelectable&&!t.isSelectable(n)){var i=t.selectedKeys.indexOf(n.serial,0);i>-1&&t.selectedKeys.splice(i,1)}})),this.isSelectable&&(e.selectedRows.length>1?(this.selectedKeys.length===this.forSelectableCheckSelectedCount&&this.checkAll(!1),this.forSelectableCheckSelectedCount=this.selectedKeys.length):this.forSelectableCheckSelectedCount=0)):this.forSelectableCheckSelectedCount=0,this.cancel()},i.prototype.onEnter=function(t){this.status!==e.FormStatus.Edit&&this.status!==e.FormStatus.Copy||null!==this.define.inCellEditField&&("TEXTAREA"===document.activeElement.tagName?t.ctrlKey&&this.save(this.currentInCellEditSerial):this.save(this.currentInCellEditSerial))},i.prototype.onEscape=function(){this.status!==e.FormStatus.Edit&&this.status!==e.FormStatus.Copy||(null!==this.define.inCellEditField||this.visibleDetailModal&&(this.visibleDetailModal=!1),this.cancel())},i.prototype.onKeydown=function(e){"Enter"===e.key?this.onEnter(e):"Escape"===e.key&&this.onEscape()},i.prototype.loadSearchListValues=function(e,t){var n=this;void 0===t&&(t=!1);var i=this.define.fieldByNames[e],r=[];Array.isArray(i.listParam)?r=i.listParam:i.listParam&&r.push(i.listParam);var a=[];if(r.forEach((function(e){var i=t?n.searchCacheSearchPane[e].values:n.searchCache[e].values;i&&1===i.length&&a.push(i[0])})),a.length===r.length&&a.length>0){1===a.length&&(a=a[0]);var l=i.name+"_"+a;this.searchListValuesCache[l]?this.define.optionsMap["search_"+i.listName]=this.searchListValuesCache[l]:this.api.getListValues(i.listName,i.listFixParam,a,null,null,(function(e){n.searchListValuesCache[l]=pe.toKendoListValues(e),n.define.optionsMap["search_"+i.listName]=n.searchListValuesCache[l]})),this.searchListValuesCacheParam[e]&&pe.compare(this.searchListValuesCacheParam[e],a)||(t?this.searchCacheSearchPane[e].values=[]:this.searchCache[e].values=[],this.searchListValuesCacheParam[e]=a)}else this.define.optionsMap["search_"+i.listName]=this.define.optionsMap[i.listName]},i.prototype.loadFieldGroups=function(e){if(void 0===e&&(e=null),this.headerGrouping)return n.prototype.loadFieldGroups.call(this,e);var t=[];if(!this.define&&!this.define.fields)return t;var i={field:null,fields:[],groupName:null};return t.push(i),this.define.fields.forEach((function(t){t.groupFirstItem=!1,t.groupFirstEditItem=!1,e&&(t.groupName||(t.groupName=e)),i.groupName=t.groupName,i.fields.push(t)})),this.define.fieldGroups=t,t},i.prototype.hasSearchCondition=function(){return this.define&&this.define.searchInfo&&Object.keys(this.define.searchInfo).length>0},i}(Pe);Ae.decorators=[{type:t.Component,args:[{selector:"gc-grid-form",template:'<div *ngIf="buttonOnTop && define" style="margin-bottom: 4px;">\r\n  \x3c!-- Search button --\x3e\r\n  <button *ngIf="searchFields && searchFields.length > 0" kendoButton icon="search"\r\n          title="{{ lang.define.lib.searchPaneTitle }}"\r\n          [primary]="hasSearchCondition() || buttonPrimary"\r\n          style="margin-right: 4px;"\r\n          (click)="visibleSearchPane = true">{{ showButtonText ? lang.define.lib.search : \'\' }}</button>\r\n\r\n\r\n  \x3c!--Other system button--\x3e\r\n  <ng-template [ngIf]="showButtons">\r\n    <ng-container *ngTemplateOutlet="systemButtons"></ng-container>\r\n  </ng-template>\r\n\r\n  <ng-container *ngTemplateOutlet="userButtons"></ng-container>\r\n\r\n</div>\r\n<kendo-grid\r\n  [virtualColumns]="virtualColumns"\r\n  [scrollable]="virtualColumns? \'virtual\' : \'scrollable\'"\r\n  *ngIf="define && !showSearchPane"\r\n  [groupable]="groupAble"\r\n  [data]="gridData"\r\n  [selectable]="{checkboxOnly: true, mode: singleSelectMode ? \'single\' : \'multiple\'}"\r\n  [sortable]="true"\r\n  [reorderable]="true"\r\n  [resizable]="true"\r\n  [height]="formHeight"\r\n  [columnMenu]="false"\r\n  [filterable]="headerFilterable? \'menu\': false"\r\n  [kendoGridSelectBy]="gridSelectionKey"\r\n  [(selectedKeys)]="selectedKeys"\r\n  (sortChange)="sortChange($event)"\r\n  (columnVisibilityChange)="columnVisibilityChange($event)"\r\n  (filterChange)="filterChange($event)"\r\n  (columnResize)="columnResize($event)"\r\n  (columnReorder)="columnReorder($event)"\r\n  [sort]="sortDescriptor"\r\n  [filter]="filterDescriptor"\r\n  [group]="groups"\r\n  (groupChange)="groupChange($event)"\r\n  style="width: 100%"\r\n  [navigatable]="true"\r\n  [kendoGridExpandDetailsBy]="expandDetailsBy"\r\n  [(expandedDetailKeys)]="expandedDetailKeys"\r\n  (selectionChange)="selectionChange($event)"\r\n  [rowClass]="rowCallback"\r\n\r\n  (cellClick)="cellClickHandler($event)"\r\n  (dblclick)="dblClickEvent()"\r\n\r\n  (keydown)="onKeydown($event)"\r\n  #grid\r\n>\r\n\r\n\x3c!--  (keydown.enter)="onEnter($event)"--\x3e\r\n\x3c!--  (keydown.escape)="onEscape($event)"--\x3e\r\n\x3c!--  { columnChooser: false , filter: {expanded: true}}--\x3e\r\n  <kendo-grid-messages\r\n    groupPanelEmpty="{{ lang.define.lib.groupPanelEmpty }}"\r\n    noRecords="{{ lang.define.lib.noRecords }}"\r\n    pagerFirstPage="{{ lang.define.lib.pagerFirstPage }}"\r\n    pagerLastPage="{{ lang.define.lib.pagerLastPage }}"\r\n    pagerPreviousPage="{{ lang.define.lib.pagerPreviousPage }}"\r\n    pagerNextPage="{{ lang.define.lib.pagerNextPage }}"\r\n    pagerPage="{{ lang.define.lib.pagerPage }}"\r\n    pagerItemsPerPage="{{ lang.define.lib.pagerItemsPerPage }}"\r\n    pagerOf="{{ lang.define.lib.pagerOf }}"\r\n    pagerItems="{{ lang.define.lib.pagerItems }}"\r\n    pagerPageNumberInputTitle="{{ lang.define.lib.pagerPageNumberInputTitle }}"\r\n    filter="{{ lang.define.lib.filter }}"\r\n    filterEqOperator="{{ lang.define.lib.filterEqOperator }}"\r\n    filterNotEqOperator="{{ lang.define.lib.filterNotEqOperator }}"\r\n    filterIsNullOperator="{{ lang.define.lib.filterIsNullOperator }}"\r\n    filterIsNotNullOperator="{{ lang.define.lib.filterIsNotNullOperator }}"\r\n    filterIsEmptyOperator="{{ lang.define.lib.filterIsEmptyOperator }}"\r\n    filterIsNotEmptyOperator="{{ lang.define.lib.filterIsNotEmptyOperator }}"\r\n    filterStartsWithOperator="{{ lang.define.lib.filterStartsWithOperator }}"\r\n    filterContainsOperator="{{ lang.define.lib.filterContainsOperator }}"\r\n    filterNotContainsOperator="{{ lang.define.lib.filterNotContainsOperator }}"\r\n    filterEndsWithOperator="{{ lang.define.lib.filterEndsWithOperator }}"\r\n    filterGteOperator="{{ lang.define.lib.filterGteOperator }}"\r\n    filterGtOperator="{{ lang.define.lib.filterGtOperator }}"\r\n    filterLteOperator="{{ lang.define.lib.filterLteOperator }}"\r\n    filterLtOperator="{{ lang.define.lib.filterLtOperator }}"\r\n    filterIsTrue="{{ lang.define.lib.filterIsTrue }}"\r\n    filterIsFalse="{{ lang.define.lib.filterIsFalse }}"\r\n    filterBooleanAll="{{ lang.define.lib.filterBooleanAll }}"\r\n    filterAfterOrEqualOperator="{{ lang.define.lib.filterAfterOrEqualOperator }}"\r\n    filterAfterOperator="{{ lang.define.lib.filterAfterOperator }}"\r\n    filterBeforeOperator="{{ lang.define.lib.filterBeforeOperator }}"\r\n    filterBeforeOrEqualOperator="{{ lang.define.lib.filterBeforeOrEqualOperator }}"\r\n    filterFilterButton="{{ lang.define.lib.filterFilterButton }}"\r\n    filterClearButton="{{ lang.define.lib.filterClearButton }}"\r\n    filterAndLogic="{{ lang.define.lib.filterAndLogic }}"\r\n    filterOrLogic="{{ lang.define.lib.filterOrLogic }}"\r\n    loading="{{ lang.define.lib.loading }}"\r\n    columnMenu="{{ lang.define.lib.columnMenu }}"\r\n    columns="{{ lang.define.lib.columns }}"\r\n    lock="{{ lang.define.lib.lock }}"\r\n    unlock="{{ lang.define.lib.unlock }}"\r\n    sortable="{{ lang.define.lib.sortable }}"\r\n    sortAscending="{{ lang.define.lib.sortAscending }}"\r\n    sortDescending="{{ lang.define.lib.sortDescending }}"\r\n    sortedAscending="{{ lang.define.lib.sortedAscending }}"\r\n    sortedDescending="{{ lang.define.lib.sortedDescending }}"\r\n    sortedDefault="{{ lang.define.lib.sortedDefault }}"\r\n    columnsApply="{{ lang.define.lib.columnsApply }}"\r\n    columnsReset="{{ lang.define.lib.columnsReset }}"\r\n    detailExpand="{{ lang.define.lib.detailExpand }}"\r\n    detailCollapse="{{ lang.define.lib.detailCollapse }}"\r\n    filterDateToday="{{ lang.define.lib.filterDateToday }}"\r\n    filterDateToggle="{{ lang.define.lib.filterDateToggle }}"\r\n    filterNumericDecrement="{{ lang.define.lib.filterNumericDecrement }}"\r\n    filterNumericIncrement="{{ lang.define.lib.filterNumericIncrement }}"\r\n  >\r\n\r\n  </kendo-grid-messages>\r\n\r\n  <ng-template [ngIf]="define && define.fieldGroups">\r\n    \x3c!--kendoGridBinding--\x3e\r\n\x3c!--    [headerClass]="\'kendo-grid-checkbox-column-header\'"--\x3e\r\n    <kendo-grid-checkbox-column\r\n\r\n      [showSelectAll]="true" [columnMenu]="false" [width]="30"\r\n      [locked]="!enableMasterDetail"\r\n      *ngIf="selection"\r\n      #columnSelection\r\n      [style]="{textAlign: \'center\'}"\r\n    >\r\n      <ng-template kendoGridHeaderTemplate >\r\n        <ng-template [ngIf]="!singleSelectMode">\r\n          <input kendoCheckBox\r\n                 kendoGridSelectAllCheckbox type="checkbox"/>\r\n        </ng-template>\r\n      </ng-template>\r\n      <ng-template kendoGridCellTemplate let-idx="rowIndex">\r\n        <ng-template [ngIf]="!isSelectable">\r\n          <input kendoCheckBox [kendoGridSelectionCheckbox]="idx" type="checkbox"/>\r\n        </ng-template>\r\n        <ng-template [ngIf]="isSelectable && data && data.length > 0">\r\n          <input\r\n            [hidden]="!isSelectable(data[idx])"\r\n            kendoCheckBox [kendoGridSelectionCheckbox]="idx" type="checkbox"/>\r\n        </ng-template>\r\n      </ng-template>\r\n\r\n    </kendo-grid-checkbox-column>\r\n\r\n    <ng-template [ngIf]="\r\n    define && rowButtonVisible\r\n    && (\r\n      (define.optionInsert || define.optionUpdate || define.optionDelete || view)\r\n      ||\r\n      (inlineItem && inlineItem.items)\r\n      )">\r\n      <kendo-grid-column\r\n        [style]="{paddingLeft: \'2px\', paddingRight: \'2px\'}"\r\n        title="　"\r\n        [width]="80"\r\n        [locked]="!enableMasterDetail"\r\n        [columnMenu]="false"\r\n        #columnSystem\r\n      >\r\n        <ng-template kendoGridCellTemplate let-record="dataItem">\r\n          \x3c!-- let-rowIndex="rowIndex"--\x3e\r\n          <gc-row-button-pane [grid]="this" [record]="record"></gc-row-button-pane>\r\n\r\n        </ng-template>\r\n      </kendo-grid-column>\r\n    </ng-template>\r\n\r\n    <ng-container *ngFor="let item of inlineItems">\r\n      <ng-template [ngIf]="item.position == \'left\'">\r\n        <kendo-grid-column [title]=""\r\n                           [style]="{paddingLeft: \'2px\', paddingRight: \'2px\'}"\r\n                           [columnMenu]="false"\r\n                           [width]="item.width ? item.width : item.items.length * 55"\r\n                           [locked]="!enableMasterDetail"\r\n                           #columnInlines\r\n        >\r\n          <ng-template kendoGridHeaderTemplate>\r\n            <span style="{{ item.headerNoWrap ? \'white-space:nowrap\' : \'white-space:pre-wrap\'}};">{{item.caption}}</span>\r\n          </ng-template>\r\n          <ng-template kendoGridCellTemplate let-record="dataItem">\r\n            <gc-inline-item [item]="item" [record]="record" [grid]="this"></gc-inline-item>\r\n          </ng-template>\r\n        </kendo-grid-column>\r\n      </ng-template>\r\n    </ng-container>\r\n\r\n    <ng-container *ngFor="let fieldGroup of define.fieldGroups">\r\n      <ng-container *ngIf="!fieldGroup.groupName; else groupField">\r\n        <ng-container *ngFor="let field of fieldGroup.fields">\r\n          <ng-template [ngIf]="!field.hidden">\r\n            <kendo-grid-column\r\n              [headerClass]="{ sortable: field.sortable }"\r\n              [locked]="field.locked && !enableMasterDetail"\r\n              [field]="field.name" [title]="field.caption"\r\n              [width]="field.width ? field.width : (field.type === FieldTypeEnum.Text? 400 : (field.defaultWidth? field.defaultWidth: defaultColumnWidth))"\r\n              [hidden]="!field.show"\r\n              [columnMenu] = "field.searchable || field.sortable"\r\n              [sortable]="true" [filterable]="field.searchable"\r\n              [class]="cellClass(field.name)"\r\n            >\r\n              <ng-template kendoGridHeaderTemplate>\r\n                <ng-container *ngIf="(field.editMode) && field.type === FieldTypeEnum.Boolean">\r\n                  <input type="checkbox" kendoCheckBox\r\n                         [indeterminate]="editModeFieldIndeterminate[field.name]"\r\n                         [(ngModel)]="editModeFieldCheck[field.name]"\r\n                         (click)="editModeFieldCheckClick(field.name)"/>&nbsp;\r\n                </ng-container>\r\n                <span *ngIf="field.required" style="color: red">*{{ field.requiredGroup }}&nbsp;</span>\r\n                <span title="{{ field.caption }}" [innerHTML]="wrapCaption(field)"></span>\r\n              </ng-template>\r\n              <ng-template kendoGridCellTemplate let-dataItem let-rowIndex="rowIndex">\r\n                <ng-template [ngIf]="!uf(field.name) || uf(field.name).mode == \'none\' || (fieldEditable(dataItem.serial, field)\r\n            && uf(field.name).mode==\'view\')||\r\n            (!fieldEditable(dataItem.serial, field) && uf(field.name).mode==\'edit\')"\r\n                             [ngIfElse]="custom">\r\n                  <gc-field\r\n                    [baseForm]="this"\r\n                    [hidden]="field.editMode && (isCheckSelectable && !isCheckSelectable(field.name, dataItem))"\r\n                          [alignByDataType]="alignByDataType"\r\n                    [apiUrl]="apiUrl"\r\n                    [link]="links?links[field.name]:null"\r\n                    [form]="define"\r\n                    [define]="field"\r\n                    [record]="dataItem"\r\n                    [(value)]="dataItem[field.name]"\r\n                    [editable]="fieldEditable(dataItem.serial, field) && !this.visibleDetailModal"\r\n                    (changed)="onFieldValueChange($event, dataItem.serial, field.name)"\r\n                    (detailMultiSelect)="openMultiSelectDetail($event)"\r\n\r\n                  ></gc-field>\r\n                </ng-template>\r\n                <ng-template #custom>\r\n                  <ng-template [ngTemplateOutlet]="uf(field.name).template"\r\n                               [ngTemplateOutletContext]="{$implicit: dataItem,\r\n                           editable: fieldEditable(dataItem.serial, field), field: field, index: rowIndex}"></ng-template>\r\n                </ng-template>\r\n              </ng-template>\r\n              <ng-template kendoGridFilterMenuTemplate let-filter let-column="column"  let-filterService="filterService">\r\n                \x3c!-- suppress AngularInvalidExpressionResultType --\x3e\r\n\x3c!--                <div [ngStyle]="{width: field.width && field.width >= 200 ? field.width + \'px\' : null }">--\x3e\r\n\r\n\x3c!--                </div>--\x3e\r\n                <gc-filter-pane [field]="field"\r\n                                [filterService]="filterService" [filter]="filter" [column]="column" [form]="this">\r\n\r\n                </gc-filter-pane>\r\n              </ng-template>\r\n              <ng-container *ngIf="footerAvailable()">\r\n                <ng-template kendoGridFooterTemplate>\r\n                  <ng-template [ngIf]="define.summaries && define.summaries[field.name]">\r\n                    <ng-template [ngIf]="!uf(field.name) || !uf(field.name).summary"\r\n                                 [ngIfElse]="custom">\r\n                      <div style="text-align: right;">\r\n                        {{define.summaries[field.name] | numberFormat : field.decimal}}\r\n                      </div>\r\n                    </ng-template>\r\n                    <ng-template #custom>\r\n                      <div style="text-align: right;">\r\n                        <ng-template [ngTemplateOutlet]="uf(field.name).template"\r\n                                     [ngTemplateOutletContext]="{$implicit: define.summaries, summary: true}"></ng-template>\r\n                      </div>\r\n                    </ng-template>\r\n                  </ng-template>\r\n                </ng-template>\r\n              </ng-container>\r\n            </kendo-grid-column>\r\n          </ng-template>\r\n        </ng-container>\r\n      </ng-container>\r\n      <ng-template #groupField>\r\n        <kendo-grid-column-group [title]="fieldGroup.groupName" [locked]="false">\r\n          <ng-container *ngFor="let field of fieldGroup.fields;">\r\n            <ng-template [ngIf]="!field.hidden">\r\n              <kendo-grid-column\r\n                [headerClass]="{ sortable: field.sortable }"\r\n                [locked]="field.locked  && !enableMasterDetail"\r\n                [field]="field.name" [title]="field.caption"\r\n                [width]="field.width ? field.width : (field.type === FieldTypeEnum.Text? 300 : (field.defaultWidth? field.defaultWidth: defaultColumnWidth))"\r\n                [hidden]="!field.show"\r\n                [sortable]="true" [filterable]="field.searchable"\r\n                [class]="cellClass(field.name)"\r\n              >\r\n                <ng-template kendoGridHeaderTemplate>\r\n                  <ng-container *ngIf="(field.editMode) && field.type === FieldTypeEnum.Boolean">\r\n                    <input type="checkbox" kendoCheckBox [indeterminate]="editModeFieldIndeterminate[field.name]"\r\n                           [(ngModel)]="editModeFieldCheck[field.name]" (click)="editModeFieldCheckClick(field.name)"/>\r\n                    &nbsp;\r\n                  </ng-container>\r\n                  <span *ngIf="field.required" style="color: red">*{{ field.requiredGroup }}&nbsp;</span>\r\n                  <span title="{{ field.caption }}" [innerHTML]="wrapCaption(field)"></span>\r\n                </ng-template>\r\n                <ng-template kendoGridCellTemplate let-dataItem let-rowIndex="rowIndex">\r\n                  <ng-template [ngIf]="!uf(field.name) || uf(field.name).mode == \'none\' || (fieldEditable(dataItem.serial, field)\r\n            && uf(field.name).mode==\'view\')||\r\n            (!fieldEditable(dataItem.serial, field) && uf(field.name).mode==\'edit\')"\r\n                               [ngIfElse]="custom">\r\n                    <gc-field\r\n                      [baseForm]="this"\r\n                      [hidden]="field.editMode && (isCheckSelectable && isCheckSelectable(field.name, dataItem))"\r\n                            [alignByDataType]="alignByDataType"\r\n                      [apiUrl]="apiUrl"\r\n                      [link]="links?links[field.name]:null"\r\n                      [form]="define"\r\n                      [define]="field"\r\n                      [record]="dataItem"\r\n                      [(value)]="dataItem[field.name]"\r\n                      [editable]="fieldEditable(dataItem.serial, field) && !this.visibleDetailModal"\r\n                      (changed)="onFieldValueChange($event, dataItem.serial, field.name)"\r\n                    ></gc-field>\r\n                  </ng-template>\r\n                  <ng-template #custom>\r\n                    <ng-template [ngTemplateOutlet]="uf(field.name).template"\r\n                                 [ngTemplateOutletContext]="{$implicit: dataItem,\r\n                           editable: fieldEditable(dataItem.serial, field), field: field, index: rowIndex}"></ng-template>\r\n                  </ng-template>\r\n                </ng-template>\r\n                <ng-template kendoGridFilterMenuTemplate let-filter let-column="column"  let-filterService="filterService">\r\n\x3c!--                  <div [ngStyle]="{width: field.width && field.width >= 200 ? field.width + \'px\' : null }">--\x3e\r\n\x3c!--                  </div>--\x3e\r\n                  \x3c!-- suppress AngularInvalidExpressionResultType --\x3e\r\n                  <gc-filter-pane [field]="field" [filterService]="filterService" [filter]="filter" [column]="column" [form]="this"></gc-filter-pane>\r\n\r\n                </ng-template>\r\n                <ng-container *ngIf="footerAvailable()">\r\n                  <ng-template kendoGridFooterTemplate>\r\n                    <ng-template [ngIf]="define.summaries && define.summaries[field.name]">\r\n                      <ng-template [ngIf]="!uf(field.name) || !uf(field.name).summary"\r\n                                   [ngIfElse]="custom">\r\n                        <div style="text-align: right;">\r\n                          {{define.summaries[field.name] | numberFormat : field.decimal}}\r\n                        </div>\r\n                      </ng-template>\r\n                      <ng-template #custom>\r\n                        <div style="text-align: right;">\r\n                          <ng-template [ngTemplateOutlet]="uf(field.name).template"\r\n                                       [ngTemplateOutletContext]="{$implicit: define.summaries, summary: true, field: field}"></ng-template>\r\n                        </div>\r\n                      </ng-template>\r\n                   </ng-template>\r\n                  </ng-template>\r\n                </ng-container>\r\n              </kendo-grid-column>\r\n            </ng-template>\r\n          </ng-container>\r\n        </kendo-grid-column-group>\r\n      </ng-template>\r\n\r\n    </ng-container>\r\n    <ng-template [ngIf]="enableMasterDetail">\r\n      <gc-master-detail-pane\r\n        *kendoGridDetailTemplate="let values" [form]="this"\r\n        [cols]="masterDetailPaneCols"\r\n        [height]="masterDetailPaneEditHeight" [values]="values">\r\n      </gc-master-detail-pane>\r\n    </ng-template>\r\n\r\n    <ng-container *ngFor="let item of inlineItems">\r\n      <ng-template [ngIf]="item.position == \'right\'">\r\n        <kendo-grid-column\r\n          [style]="{paddingLeft: \'2px\', paddingRight: \'2px\'}"\r\n          [columnMenu]="false"\r\n          [title]=""\r\n          [width]="item.width ? item.width: item.items.length * 55"\r\n          #rightColumnInlines\r\n        >\r\n          <ng-template kendoGridHeaderTemplate>\r\n            <span style="{{ item.headerNoWrap ? \'white-space:nowrap\' : \'white-space:pre-wrap\'}};">{{item.caption}}</span>\r\n          </ng-template>\r\n          <ng-template kendoGridCellTemplate let-record="dataItem">\r\n            <gc-inline-item [item]="item" [record]="record" [grid]="this"></gc-inline-item>\r\n          </ng-template>\r\n        </kendo-grid-column>\r\n      </ng-template>\r\n    </ng-container>\r\n  </ng-template>\r\n\r\n\r\n\r\n</kendo-grid>\r\n\r\n\x3c!--Pager--\x3e\r\n<ng-container *ngIf="define && !showSearchPane && showFooterBar">\r\n  <kendo-datapager style="width: 100%;" [pageSize]="define.pageSize > 0 ? define.pageSize: data.length" [skip]="define.pageSize > 0 ? define.pageSize*(define.pageIndex-1) : 0"\r\n                   [total]="define.total" (pageChange)="onPageChange($event)">\r\n    <kendo-datapager-messages\r\n      firstPage="{{ lang.define.lib.pagerFirstPage }}"\r\n      lastPage="{{ lang.define.lib.pagerLastPage }}"\r\n      previousPage="{{ lang.define.lib.pagerPreviousPage }}"\r\n      nextPage="{{ lang.define.lib.pagerNextPage }}"\r\n      page="{{ lang.define.lib.pagerPage }}"\r\n      pageNumberInputTitle="{{ lang.define.lib.pagerPageNumberInputTitle }}"\r\n      itemsPerPage="{{ lang.define.lib.pagerItemsPerPage }}"\r\n      of="{{ lang.define.lib.pagerOf }}"\r\n      items="{{ lang.define.lib.pagerItems }}"\r\n    ></kendo-datapager-messages>\r\n    <ng-template kendoDataPagerTemplate>\r\n\r\n      \x3c!--Back button--\x3e\r\n      <ng-template [ngIf]="showBackButton">\r\n        <gc-back-button></gc-back-button>\r\n      </ng-template>\r\n\r\n      \x3c!-- System button --\x3e\r\n      \x3c!--let-totalPages="totalPages" let-currentPage="currentPage"--\x3e\r\n      <kendo-dropdownbutton [data]="settingCommands"\r\n                            (open)="loadSettingCommands()"\r\n                            icon="more-horizontal" (itemClick)="settingCommandClick($event)"\r\n                            title="More commands"\r\n      >\r\n        <ng-template kendoDropDownButtonItemTemplate let-dataItem>\r\n          <ng-container *ngIf="dataItem[\'setting\']; else elseBlock">\r\n            <span class="k-icon k-i-{{ dataItem.icon }}"></span>\r\n            <span style="color: blue;">{{ dataItem.text }}</span>\r\n          </ng-container>\r\n          <ng-template #elseBlock>\r\n            <span class="k-icon k-i-{{ dataItem.icon }}"></span>\r\n            <span>{{ dataItem.text }}</span>\r\n          </ng-template>\r\n        </ng-template>\r\n      </kendo-dropdownbutton>&nbsp;\r\n\r\n      \x3c!-- Column button --\x3e\r\n      <button kendoButton icon="columns"\r\n              title="Show/hide columns"\r\n              [primary]="visibleColumnPanel"\r\n              style="margin-right: 4px;"\r\n              (click)="openColumnSetting($event)"></button>\r\n      \x3c!-- Search button --\x3e\r\n      <button *ngIf="!buttonOnTop && searchFields && searchFields.length > 0" kendoButton icon="search"\r\n              title="{{ lang.define.lib.searchPaneTitle }}"\r\n              [primary]="hasSearchCondition() || buttonPrimary"\r\n              style="margin-right: 4px;"\r\n              look="{{ hasSearchCondition() && buttonPrimary ? \'outline\' : \'solid\' }}"\r\n              (click)="visibleSearchPane = true">{{ showButtonText ? lang.define.lib.search : \'\' }}</button>\r\n\r\n\r\n      \x3c!--Import button--\x3e\r\n      <ng-template [ngIf]="!buttonOnTop && showButtons">\r\n        <ng-container *ngTemplateOutlet="systemButtons"></ng-container>\r\n      </ng-template>\r\n\r\n      \x3c!---User button--\x3e\r\n      <ng-template [ngIf]="!buttonOnTop && userButtonDirectives && userButtonDirectives.length >0">\r\n        <ng-container *ngTemplateOutlet="userButtons"></ng-container>&nbsp;\r\n      </ng-template>\r\n      <kendo-datapager-page-sizes\r\n        *ngIf="dataPagerVisible && ((define.total > data.length) || (data.length > pageSizesThreshold)) && define.pageSize > 0"\r\n        [pageSizes]="pageSizes" style="margin-left: 0"></kendo-datapager-page-sizes>\r\n      <ng-template [ngIf]="dataPagerVisible && (define.total > data.length)">\r\n        <kendo-datapager-prev-buttons style="margin-right: 10px;"></kendo-datapager-prev-buttons>\r\n        <kendo-datapager-input></kendo-datapager-input>\r\n        <kendo-datapager-next-buttons></kendo-datapager-next-buttons>\r\n      </ng-template>\r\n      <kendo-datapager-info></kendo-datapager-info>\r\n    </ng-template>\r\n  </kendo-datapager>\r\n</ng-container>\r\n\r\n\x3c!-- User button --\x3e\r\n<ng-template #userButtons>\r\n  <ng-container *ngFor="let marker of userButtonDirectives">\r\n    <ng-template [ngTemplateOutlet]="marker.template"></ng-template>\r\n  </ng-container>\r\n</ng-template>\r\n\r\n\x3c!-- System button --\x3e\r\n<ng-template #systemButtons>\r\n\r\n  <button kendoButton icon="plus" [primary]="buttonPrimary"\r\n          (click)="startInsert($event)"\r\n          title="{{ lang.define.lib.add }}"\r\n          style="margin-right: 4px;"\r\n          [hidden]="status!=FormStatusEnum.View || !define.optionInsert">{{ showButtonText ? lang.define.lib.add : \'\' }}</button>\r\n  <button kendoButton icon="edit" [primary]="buttonPrimary"\r\n          *ngIf="this.define.optionUpdate && this.checkSelected() && this.status === FormStatusEnum.View"\r\n          (click)="startEditMultiWithEvent($event)"\r\n          title="{{ lang.define.lib.edit}}"\r\n          style="margin-right: 4px;"\r\n          [hidden]="status!=FormStatusEnum.View || !define.optionUpdate || !editCache  || !editCache[1]">\r\n    {{ showButtonText ? lang.define.lib.edit : \'\' }}\r\n  </button>\r\n  <button kendoButton icon="close"\r\n          [primary]="buttonPrimary"\r\n          (click)="cancel()" style="margin-right: 4px;"\r\n          title="{{ lang.define.lib.cancel}}"\r\n          *ngIf="(this.define.optionInsert || this.define.optionUpdate) && (this.status === FormStatusEnum.Edit || this.status === FormStatusEnum.Copy || this.status === FormStatusEnum.Insert)">\r\n    {{ showButtonText ? lang.define.lib.cancel : \'\' }}\r\n  </button>\r\n  <button\r\n    kendoButton icon="save" [primary]="true"\r\n    title="{{ lang.define.lib.save }}"\r\n    (click)="save()"\r\n    style="margin-right: 4px;"\r\n    *ngIf="(this.define.optionInsert || this.define.optionUpdate) && (this.status === FormStatusEnum.Edit || this.status === FormStatusEnum.Copy)"\r\n  >\r\n    {{ showButtonText ? lang.define.lib.save : \'\' }}\r\n  </button>\r\n  <button kendoButton icon="copy" [primary]="buttonPrimary"\r\n          (click)="startCopyMultiWithEvent($event)"\r\n          title="{{ lang.define.lib.copy }}"\r\n          style="margin-right: 4px;"\r\n          *ngIf="define.optionInsert && define.optionCopy && this.checkSelected() && this.status === FormStatusEnum.View"\r\n          >\r\n    {{ showButtonText ? lang.define.lib.copy : \'\' }}\r\n  </button>\r\n  <button kendoButton icon="trash" [primary]="buttonPrimary"\r\n          style="margin-right: 4px;"\r\n          (click)="delete()"\r\n          title="{{ lang.define.lib.delete }}"\r\n          *ngIf="this.define.optionDelete && this.checkSelected() && this.status === FormStatusEnum.View"\r\n  >\r\n    {{ showButtonText ? lang.define.lib.delete : \'\' }}\r\n  </button>\r\n\x3c!--  imageUrl="/assets/image/excel-icon.png"--\x3e\r\n  <button kendoButton\r\n          icon = "download"\r\n          [primary]="buttonPrimary"\r\n          style="margin-right: 4px;"\r\n          (click)="excel()"\r\n          title="{{ lang.define.lib.excel }}"\r\n          *ngIf="this.define.optionExcel && this.status === FormStatusEnum.View"\r\n  >\r\n    {{ showButtonText ? lang.define.lib.excel : \'\' }}\r\n  </button>\r\n  <gc-import-button style="margin-right: 4px;" title="Import excel"\r\n                    *ngIf="define.optionImport"\r\n                    [primary]="buttonPrimary"\r\n                    [apiUrl]="apiUrl"\r\n                    [define]="define"\r\n                    (imported)="onImported()"\r\n                    [note]="importNote"\r\n                    [caption]="showButtonText ? lang.define.lib.import : \'\'"\r\n                    [deleteOption]="importDeleteOption"\r\n  ></gc-import-button>\r\n</ng-template>\r\n\r\n\x3c!-- Column pane --\x3e\r\n<gc-column-pane\r\n  [(visible)]="visibleColumnPanel"\r\n  [width]="800"\r\n  [form]="this" [title]="lang.define.lib.columnSetting"\r\n  [columnSettingPhpCode]="columnSettingPhpCode"\r\n></gc-column-pane>\r\n\x3c!-- Detail pane --\x3e\r\n<gc-detail-modal [(visible)]="visibleDetailModal" [form]="this"\r\n                 [iconName]="detailModalIcon"\r\n                 [title]="detailModalTitle"\r\n                 [width]="detailDialogWidth"\r\n></gc-detail-modal>\r\n\r\n\x3c!-- Search pane --\x3e\r\n<ng-template [ngIf]="showSearchPane">\r\n  <div [style.height]="(formHeight + 10) + \'px\'" style="overflow-y: auto">\r\n    <div [style.width] = "searchDialogWidth + \'px\'">\r\n      <gc-search-pane [form]="this" [width]="null" [height]="null"\r\n                      #searchPane></gc-search-pane>\r\n    </div>\r\n  </div>\r\n  <button kendoButton icon="reset" (click)="searchPane.reset()">{{ lang.define.lib.reset }}</button>&nbsp;\r\n  <button kendoButton icon="search" [primary]="true" (click)="searchPane.search()">{{ lang.define.lib.filter }}</button>\r\n</ng-template>\r\n\r\n<gc-search-pane-dialog [(visible)]="visibleSearchPane"\r\n                       [width]="searchDialogWidth"\r\n                       [form]="this" [title]="searchPaneTitle"></gc-search-pane-dialog>\r\n\r\n\x3c!-- Setting pane --\x3e\r\n<gc-setting-pane [form]="this"></gc-setting-pane>\r\n\r\n<gc-edit-column-select-pane [form]="this" [title]="selectEditColumnPaneTitle" [(visible)]="visibleEditColumnPane"></gc-edit-column-select-pane>\r\n\r\n<div *ngIf="dataLoading || loading" class="k-i-loading"></div>\r\n\r\n',styles:[".k-i-loading{position:fixed;top:0;left:0;right:0;bottom:0;font-size:64px;background-color:hsla(0,0%,100%,.1);color:#ff6757;z-index:99999}.split{margin-left:4px;margin-right:4px;width:2px;background-color:grey}"]}]}],Ae.ctorParameters=function(){return[{type:me},{type:fe},{type:ye},{type:t.ElementRef},{type:a.DatePipe},{type:ge},{type:t.ChangeDetectorRef},{type:t.NgZone}]},Ae.propDecorators={virtualColumns:[{type:t.Input}],searchPaneTitle:[{type:t.Input}],selectEditColumnPaneTitle:[{type:t.Input}],importDeleteOption:[{type:t.Input}],importNote:[{type:t.Input}],cellClassFunction:[{type:t.Input}],dataPagerVisible:[{type:t.Input}],pageSizesThreshold:[{type:t.Input}],rowButtonVisible:[{type:t.Input}],charWidth:[{type:t.Input}],wrapHeader:[{type:t.Input}],grid:[{type:t.ViewChild,args:["grid"]}],columnSelection:[{type:t.ViewChild,args:["columnSelection"]}],columnSystem:[{type:t.ViewChild,args:["columnSystem"]}],columnInlines:[{type:t.ViewChildren,args:["columnInlines"]}],rightColumnInlines:[{type:t.ViewChildren,args:["rightColumnInlines"]}],userButtonDirectives:[{type:t.ContentChildren,args:[ke]}],editFormDirective:[{type:t.ContentChild,args:[Se]}],inlineItems:[{type:t.Input}],inlineItem:[{type:t.Input}],selection:[{type:t.Input}],view:[{type:t.Input}],groupAble:[{type:t.Input}],autoSize:[{type:t.Input}],copyDialogTitle:[{type:t.Input}],addDialogTitle:[{type:t.Input}],updateDialogTitle:[{type:t.Input}],viewDialogTitle:[{type:t.Input}],detailDialogWidth:[{type:t.Input}],searchDialogWidth:[{type:t.Input}],enableMasterDetail:[{type:t.Input}],masterDetailPaneCols:[{type:t.Input}],masterDetailPaneEditHeight:[{type:t.Input}],headerResizable:[{type:t.Input}],excelColumnSelectable:[{type:t.Input}],inCellEditable:[{type:t.Input}],showButtonText:[{type:t.Input}],buttonPrimary:[{type:t.Input}],buttonOnTop:[{type:t.Input}],headerGrouping:[{type:t.Input}],headerFilterable:[{type:t.Input}],changed:[{type:t.Output}],imported:[{type:t.Output}],isSelectable:[{type:t.Input}],isCheckSelectable:[{type:t.Input}],isDeletable:[{type:t.Input}],deletableCheckMessage:[{type:t.Input}],isEditable:[{type:t.Input}],isFieldEditable:[{type:t.Input}],isHeaderAllCheckChangeable:[{type:t.Input}],editableCheckMessage:[{type:t.Input}],selectableCheckMessage:[{type:t.Input}],singleSelectMode:[{type:t.Input}],onResize:[{type:t.HostListener,args:["window:resize",["$event"]]}]};var Re=function(){function n(n){this.lang=n,this.FormStatusEnum=e.FormStatus,this.FieldTypeEnum=e.FieldType,this.selectedBookmark=null,this.outlineItems=[],this.groups=[],this.visibleChange=new t.EventEmitter,this.title="",this.iconName="add",this.width=null,this.dialogVisible=!1,this.maxHeight=100}return Object.defineProperty(n.prototype,"visible",{get:function(){return this.dialogVisible},set:function(e){var t=this;this.dialogVisible=e,e&&(this.createOutline(),setTimeout((function(){t.dialog.focus(),t.form&&t.form.focusFirstControl(!1)}),200))},enumerable:!1,configurable:!0}),n.prototype.ngOnInit=function(){this.resize()},n.prototype.close=function(){this.form.cancel(),this.form.bulkUpdating=!1,this.form.bulkCoping=!1,this.visibleChange.emit(!1),this.dialogVisible=!1},n.prototype.save=function(){var t=this;this.form.bulkUpdating||this.form.bulkCoping?this.form.saveBulk(this.form.data[this.form.currentIndex].serial,(function(n){n===e.ServiceCode.Success&&(t.form.bulkUpdating=!1,t.form.bulkCoping=!1)})):this.form.save(this.form.data[this.form.currentIndex].serial,(function(t){e.ServiceCode.Success}))},n.prototype.onResize=function(e){this.resize()},n.prototype.onKeydownHandler=function(e){this.close()},n.prototype.resize=function(){this.maxHeight=window.innerHeight-200},n.prototype.next=function(){this.form.currentIndex<this.form.data.length-1?this.form.currentIndex=this.form.currentIndex+1:this.form.currentIndex=this.form.data.length-1,this.form.status===e.FormStatus.Edit&&this.form.startEdit(this.form.data[this.form.currentIndex].serial,{ctrlKey:!0})},n.prototype.previous=function(){this.form.currentIndex>0?this.form.currentIndex=this.form.currentIndex-1:this.form.currentIndex=0,this.form.status===e.FormStatus.Edit&&this.form.startEdit(this.form.data[this.form.currentIndex].serial,{ctrlKey:!0})},n.prototype.outlineSelected=function(e){var t=e.item.bookmark;this.selectedBookmark=t;var n=document.getElementById(t);n&&n.scrollIntoView()},n.prototype.createOutline=function(){var e=this;if(this.form&&this.form.define){this.outlineItems=[];var t=[],n=null,i=0,r=!1;this.form.define.fields.forEach((function(a){a.hidden||(n&&n.name===a.groupName||(i++,a.groupName&&"null"!==a.groupName?(n={name:a.groupName,fields:[],bookmark:"bookmark"+i},t.push(n),e.outlineItems.push({text:a.groupName&&"null"!==a.groupName?a.groupName:"TOP",icon:"k-i-circle",bookmark:"bookmark"+i})):r||(e.outlineItems.push({text:a.groupName&&"null"!==a.groupName?a.groupName:"TOP",icon:"k-i-circle",bookmark:"bookmark"+i}),n={name:a.groupName,fields:[],bookmark:"bookmark"+i},t.push(n),r=!0)),n.fields.push(a))})),this.groups=t}},n}();Re.decorators=[{type:t.Component,args:[{selector:"gc-detail-modal",template:'<kendo-dialog *ngIf="dialogVisible" (close)="close()"\r\n              autoFocusedElement="dialog"\r\n              [width]="width" #dialog>\r\n  <kendo-dialog-titlebar>\r\n    <div style="font-size: 18px; line-height: 1.3em;">\r\n      <span class="k-icon k-i-{{iconName}}"></span>{{ title }}\r\n    </div>\r\n  </kendo-dialog-titlebar>\r\n  <ng-template *ngIf="(outlineItems && outlineItems.length > 1);then outlineBlock; else legacyBlock"></ng-template>\r\n\r\n  <ng-template #legacyBlock>\r\n    <ng-container *ngTemplateOutlet="content"></ng-container>\r\n  </ng-template>\r\n\r\n  <ng-template #outlineBlock>\r\n    <kendo-drawer-container>\r\n      <kendo-drawer\r\n        [autoCollapse]="false"\r\n        [items]="outlineItems"\r\n        position="end"\r\n        mode="push"\r\n        [mini]="false"\r\n        [expanded]="true"\r\n        (select)="outlineSelected($event)"\r\n      >\r\n      </kendo-drawer>\r\n      <kendo-drawer-content>\r\n        <ng-container *ngTemplateOutlet="content"></ng-container>\r\n      </kendo-drawer-content>\r\n    </kendo-drawer-container>\r\n\r\n  </ng-template>\r\n\r\n  <ng-template #content>\r\n    <div [style.maxHeight.px]="maxHeight" style="padding-right: 15px; overflow-y: auto;"\r\n         [style.marginRight.px]="(outlineItems && outlineItems.length > 1) ? null: -15"\r\n         [style.paddingRight.px]="(outlineItems && outlineItems.length > 1) ? null: 15"\r\n    >\r\n      <div id="bookmark1" class="group-name gc-single-form-group-header"\r\n           [style.color]="\'bookmark1\' === selectedBookmark ? \'blue\': null"></div>\r\n      <table class="field-table" *ngIf="form && form.define">\r\n        <ng-container *ngFor="let group of this.groups">\r\n          <ng-container *ngIf="group.name && group.name !== \'null\'">\r\n            <tr>\r\n              <td colspan="3" style="padding: 5px 0 3px 0;font-size: 150%;border-bottom: 2px solid #AFAFAF">\r\n                <div id="{{group.bookmark}}" class="group-name gc-single-form-group-header"\r\n                     [style.color]="group.bookmark === selectedBookmark ? \'blue\': null"\r\n                >{{ group.name }}</div>\r\n              </td>\r\n            </tr>\r\n          </ng-container>\r\n\r\n          <ng-container *ngFor="let field of group.fields">\r\n            <ng-template [ngIf]="!(field.hidden || (form.fieldVisibleCondition && !form.fieldVisibleCondition(field.name, form.data[form.currentIndex]))) &&\r\n      (\r\n      (field.editable && form.status !== FormStatusEnum.View && (!form.isFieldEditable || form.isFieldEditable(field.name, form.data[form.currentIndex])) ) ||\r\n      (form.status === FormStatusEnum.View && (form.data[form.currentIndex][field.name] || field.editMode || field.type === FieldTypeEnum.File ))\r\n      )">\r\n              <tr>\r\n                <th>{{ field.caption }}<span *ngIf="field.required"\r\n                                             class="field-required">*{{ field.requiredGroup }}</span></th>\r\n                <td *ngIf="form && (form.bulkCoping || form.bulkUpdating)" style="width: 30px; min-width: initial">\r\n                    <input type="checkbox" kendoCheckBox [(ngModel)]="form.bulkUpdateSelectedItems[field.name]">\r\n                </td>\r\n                <td>\r\n                  <ng-template [ngIf]="!form.uf(field.name) || (form.fieldEditable(form.data[form.currentIndex].serial, field)\r\n        && form.uf(field.name).mode==\'view\') ||\r\n        (!form.fieldEditable(form.data[form.currentIndex].serial, field) && form.uf(field.name).mode==\'edit\')"\r\n                               [ngIfElse]="custom">\r\n                    <gc-field\r\n                      [alignByDataType]="false"\r\n                      [apiUrl]="form.apiUrl"\r\n                      [link]="form.links?form.links[field.name]:null"\r\n                      [record]="form.data[form.currentIndex]"\r\n                      [form]="form.define"\r\n                      [define]="field"\r\n                      [(value)]="form.data[form.currentIndex][field.name]"\r\n                      [editable]="form.fieldEditable(form.data[form.currentIndex].serial, field)"\r\n                      (changed)="form.onFieldValueChange($event, form.data[form.currentIndex].serial, field.name)"\r\n                      (detailMultiSelect)="form.openMultiSelectDetail($event)"\r\n                    ></gc-field>\r\n                  </ng-template>\r\n                  <ng-template #custom>\r\n                    <ng-template [ngTemplateOutlet]="form.uf(field.name).template"\r\n                                 [ngTemplateOutletContext]="{$implicit: form.data[form.currentIndex],\r\n                       editable: form.fieldEditable(form.data[form.currentIndex].serial, field), field: field, index: form.currentIndex}"></ng-template>\r\n                  </ng-template>\r\n\r\n                </td>\r\n              </tr>\r\n            </ng-template>\r\n          </ng-container>\r\n        </ng-container>\r\n\r\n      </table>\r\n    </div>\r\n\r\n  </ng-template>\r\n\r\n\r\n  <kendo-dialog-actions [layout]="\'normal\'">\r\n    <button kendoButton\r\n            *ngIf="this.form.status === FormStatusEnum.Edit || this.form.status === FormStatusEnum.View"\r\n            (click)="previous()" icon="arrow-chevron-left">\r\n      {{ lang.define.lib.previous }}</button>\r\n    <button kendoButton\r\n            *ngIf="this.form.status === FormStatusEnum.Edit || this.form.status === FormStatusEnum.View"\r\n            (click)="next()" icon="arrow-chevron-right">\r\n      {{ lang.define.lib.next }}</button>\r\n    <button kendoButton icon="close" (click)="close()">{{ lang.define.lib.close }}</button>\r\n    <button kendoButton [primary]="true" [icon]="\'save\'" (click)="save()" *ngIf="form.status != FormStatusEnum.View">\r\n      {{ lang.define.lib.save }}</button>\r\n  </kendo-dialog-actions>\r\n</kendo-dialog>\r\n',styles:[".field-table td{padding:10px 0 10px 10px;height:40px}.field-table th{width:10px}.field-required{padding-left:5px;color:red}.field-table{width:100%;border:none;border-collapse:collapse}.field-table td,th{min-height:30px;border:2px solid #f0f0f0}.field-table td{background-color:#fff;width:70%;padding:5px;min-width:300px;touch-action:auto}.field-table th{background-color:#f9f9f9;width:30%;font-weight:700;white-space:nowrap;padding-right:20px;padding-left:10px;text-align:left;border:2px solid #f0f0f0;min-width:150px}"]}]}],Re.ctorParameters=function(){return[{type:me}]},Re.propDecorators={dialog:[{type:t.ViewChild,args:["dialog"]}],visible:[{type:t.Input}],visibleChange:[{type:t.Output}],title:[{type:t.Input}],iconName:[{type:t.Input}],width:[{type:t.Input}],form:[{type:t.Input}],onResize:[{type:t.HostListener,args:["window:resize",["$event"]]}],onKeydownHandler:[{type:t.HostListener,args:["document:keydown.escape",["$event"]]}]};var We=function(){function t(t,n,i){var r=this;this.lang=t,this.element=n,this.popupService=i,this.popupSettings={popupClass:"filter-pane-component"},this.config=ue,this.FieldTypeEnum=e.FieldType,this.dateFormat=ue.dateFormat,this.serverSide=!0,this.arrayListItems=[{text:this.lang.define.lib.include,value:e.SearchType.In},{text:this.lang.define.lib.exclude,value:e.SearchType.NotIn}],this.boolListItems=[{text:"=",value:e.SearchType.Equal},{text:"<>",value:e.SearchType.NotEqual}],this.boolValueListItems=[{text:"",value:null},{text:this.lang.define.lib.yes,value:1},{text:this.lang.define.lib.no,value:0}],this.stringListItems=[{text:"=",value:e.SearchType.Equal},{text:"<>",value:e.SearchType.NotEqual},{text:this.lang.define.lib.contains,value:e.SearchType.Contains},{text:this.lang.define.lib.notContains,value:e.SearchType.NotContains},{text:this.lang.define.lib.startWith,value:e.SearchType.StartWith},{text:this.lang.define.lib.endWith,value:e.SearchType.EndWith}],this.dateListItems=[{text:this.lang.define.lib.between,value:e.SearchType.In},{text:this.lang.define.lib.outside,value:e.SearchType.NotIn}],this.numberListItems=[{text:this.lang.define.lib.between,value:e.SearchType.In},{text:this.lang.define.lib.outside,value:e.SearchType.NotIn},{text:"=",value:e.SearchType.Equal},{text:"<>",value:e.SearchType.NotEqual}],this.popupSubscription=i.onClose.subscribe((function(e){document.activeElement&&y.closest(document.activeElement,(function(e){return e===r.element.nativeElement||String(e.className).indexOf("filter-pane-component")>=0}))&&e.preventDefault()}))}return t.prototype.ngOnInit=function(){this.serverSide&&this.doDummyFilter()},t.prototype.doDummyFilter=function(){var e=[];e.push({field:this.field.name,operator:"contains",value:"@"}),this.filterService.filter({logic:"and",filters:e})},t.prototype.getNumberFormat=function(){return pe.createNumberFormat(this.field.decimal)},t.prototype.onFocus=function(){this.form.loadSearchListValues(this.field.name)},t.prototype.ngOnDestroy=function(){this.popupSubscription&&this.popupSubscription.unsubscribe()},t}();We.decorators=[{type:t.Component,args:[{selector:"gc-filter-pane",template:'\x3c!--List values--\x3e\r\n<ng-container *ngIf="field.listValues;else autoCompleteField">\r\n  <kendo-dropdownlist\r\n    *ngIf="serverSide"\r\n    [(value)]="form.searchCache[field.name].type" [data]="arrayListItems"\r\n    [valuePrimitive]="true" textField="text" valueField="value"></kendo-dropdownlist>\r\n  <gc-multi-select [listKendo]="field.listKendoValues"\r\n                   [(values)]="form.searchCache[field.name].values">\r\n  </gc-multi-select>\r\n</ng-container>\r\n\r\n\x3c!--List list name--\x3e\r\n<ng-template #autoCompleteField>\r\n  <ng-container *ngIf="field.listName && !field.autocomplete;else checkField">\r\n    <kendo-dropdownlist\r\n      *ngIf="serverSide"\r\n      [(value)]="form.searchCache[field.name].type" [data]="arrayListItems" [valuePrimitive]="true" textField="text" valueField="value"></kendo-dropdownlist>\r\n    <ng-container *ngIf="field.tree; else notTree">\r\n      <gc-multi-select [listKendo]="form.define.optionsMap[field.listName + \'_tree\']"\r\n                       [(values)]="form.searchCache[field.name].values">\r\n      </gc-multi-select>\r\n    </ng-container>\r\n    <ng-template #notTree>\r\n      <gc-multi-select\r\n        (focus)="onFocus()"\r\n        [field]="field"\r\n        [form]="form.define"\r\n        [listKendo]="form.define.optionsMap[\'search_\' + field.listName]"\r\n        [dropdownWidth]="field.dropdownWidth"\r\n        [(values)]="form.searchCache[field.name].values">\r\n      </gc-multi-select>\r\n    </ng-template>\r\n\r\n  </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #checkField>\r\n  <ng-container *ngIf="field.listName;else normalField">\r\n    <ng-container *ngIf="form.searchCache[field.name]">\r\n      <kendo-dropdownlist\r\n        *ngIf="serverSide"\r\n        [(value)]="form.searchCache[field.name].type"\r\n        [data]="stringListItems" [valuePrimitive]="true" textField="text" valueField="value"></kendo-dropdownlist>\r\n      <input kendoTextBox type="text" [(ngModel)]="form.searchCache[field.name].value1">\r\n    </ng-container>\r\n  </ng-container>\r\n</ng-template>\r\n\r\n\x3c!--Normal field--\x3e\r\n<ng-template #normalField>\r\n  <ng-container [ngSwitch]="field.type">\r\n    \x3c!-- the same view can be shown in more than one case --\x3e\r\n    <ng-container *ngSwitchCase="field.type == FieldTypeEnum.Date ? field.type: -1">\r\n      <kendo-dropdownlist\r\n        *ngIf="serverSide"\r\n        [(value)]="form.searchCache[field.name].type" [data]="dateListItems" [valuePrimitive]="true" textField="text" valueField="value"></kendo-dropdownlist>\r\n          <gc-date-picker [popupSettings]="popupSettings"\r\n                          [(value)]="form.searchCache[field.name].value1" >\r\n\r\n          </gc-date-picker>\r\n          <gc-date-picker  [popupSettings]="popupSettings"\r\n                            [(value)]="form.searchCache[field.name].value2" ></gc-date-picker >\r\n    </ng-container>\r\n    <ng-container *ngSwitchCase="field.type == FieldTypeEnum.DateTime ? field.type: -1">\r\n      <kendo-dropdownlist\r\n        *ngIf="serverSide"\r\n        [(value)]="form.searchCache[field.name].type" [data]="dateListItems" [valuePrimitive]="true" textField="text" valueField="value"></kendo-dropdownlist>\r\n      <gc-date-picker\r\n                      [time]="true"\r\n                      [popupSettings]="popupSettings"\r\n                      [(value)]="form.searchCache[field.name].value1" >\r\n      </gc-date-picker>\r\n      <gc-date-picker\r\n        [time]="true"\r\n        [popupSettings]="popupSettings"\r\n        [(value)]="form.searchCache[field.name].value2" >\r\n      </gc-date-picker>\r\n    </ng-container>\r\n    <ng-container *ngSwitchCase="field.type === FieldTypeEnum.Float || field.type === FieldTypeEnum.Int ? field.type : -1">\r\n      <kendo-dropdownlist\r\n        *ngIf="serverSide"\r\n        [(value)]="form.searchCache[field.name].type" [data]="numberListItems" [valuePrimitive]="true" textField="text" valueField="value"></kendo-dropdownlist>\r\n      <kendo-numerictextbox [(ngModel)]="form.searchCache[field.name].value1" [format]="getNumberFormat()"></kendo-numerictextbox>\r\n      <kendo-numerictextbox [(ngModel)]="form.searchCache[field.name].value2" [format]="getNumberFormat()"></kendo-numerictextbox>\r\n    </ng-container>\r\n    <ng-container *ngSwitchCase="FieldTypeEnum.Boolean">\r\n      <kendo-dropdownlist\r\n        *ngIf="serverSide"\r\n        [(value)]="form.searchCache[field.name].type" [data]="boolListItems" [valuePrimitive]="true" textField="text" valueField="value"></kendo-dropdownlist>\r\n      <kendo-dropdownlist\r\n        textField="text"\r\n        valueField="value"\r\n        [valuePrimitive]="true"\r\n        [(ngModel)]="form.searchCache[field.name].value1" [data]="boolValueListItems"></kendo-dropdownlist>\r\n    </ng-container>\r\n\r\n    <ng-container *ngSwitchDefault>\r\n      <ng-container *ngIf="form.searchCache[field.name]">\r\n        <kendo-dropdownlist\r\n          *ngIf="serverSide"\r\n          [(value)]="form.searchCache[field.name].type"  [data]="stringListItems" [valuePrimitive]="true" textField="text" valueField="value"></kendo-dropdownlist>\r\n        <input kendoTextBox type="text" [(ngModel)]="form.searchCache[field.name].value1">\r\n      </ng-container>\r\n    </ng-container>\r\n  </ng-container>\r\n</ng-template>\r\n',styles:[""]}]}],We.ctorParameters=function(){return[{type:me},{type:t.ElementRef},{type:g.SinglePopupService}]},We.propDecorators={filter:[{type:t.Input}],filterService:[{type:t.Input}],column:[{type:t.Input}],field:[{type:t.Input}],form:[{type:t.Input}],serverSide:[{type:t.Input}]};var qe=function(){function t(e){this.lang=e,this.width=null,this.height=null,this.columnSearchValue=null,this.columnSearching=!1,this.tableState={take:100,skip:0}}return t.prototype.ngOnInit=function(){this.init(),this.height||(this.height=window.innerHeight-200,this.height<0&&(this.height=500))},t.prototype.search=function(){var t=this;this.form.filterDescriptor.filters=[];var n={};Object.keys(this.form.searchCacheSearchPane).forEach((function(i){var r=t.form.searchCacheSearchPane[i];if(pe.searchCacheActive(r)){n[i]=r;var a=t.form.define.fieldByNames[i];a.searchOnly||(t.form.searchCache[i]=t.form.searchCacheSearchPane[i],t.form.searchCache[i].type!==e.SearchType.IsNull&&t.form.searchCache[i].type!==e.SearchType.IsNotNull||(t.form.searchCache[i].value1=null,t.form.searchCache[i].value2=null,t.form.searchCache[i].values=null,a.type!==e.FieldType.String&&a.type!==e.FieldType.Boolean||a.listName||a.listValues?t.form.searchCache[i].type=t.form.searchCache[i].type===e.SearchType.IsNull?e.SearchType.In:e.SearchType.NotIn:t.form.searchCache[i].type=t.form.searchCache[i].type===e.SearchType.IsNull?e.SearchType.Equal:e.SearchType.NotEqual),t.form.filterDescriptor.filters.push({logic:"and",filters:[{field:i,operator:"contains",value:"@"}]}))}}));var i=this.form.define.searchInfo;return this.form.define.searchInfo=n,this.form.checkSearchRequire()?(this.form.searchBySearchPane=!0,this.form.define.pageIndex=1,this.form.load(),!0):(this.form.define.searchInfo=i,!1)},t.prototype.load=function(){var e=this;this.showFields=[],this.form.searchOnlyFields.forEach((function(t){e.showFields.push(t)})),this.form.searchFields.forEach((function(t){t.show&&e.showFields.push(t)})),this.form.searchFields.forEach((function(t){t.show||e.showFields.push(t)})),this.onShowItemChange()},t.prototype.init=function(){var t=this;this.form&&this.form.define&&this.form.define.searchInfo&&(this.load(),Object.keys(this.form.searchCacheSearchPane).forEach((function(e){t.form.searchCacheSearchPane[e]=t.form.createSearchCacheField(t.form.define.fieldByNames[e])})),Object.keys(this.form.define.searchInfo).forEach((function(n){var i=t.form.define.searchInfo[n],r=t.form.createSearchCacheField(t.form.define.fieldByNames[n]);if(r.values=i.values,r.value2=i.value2,r.value1=i.value1,r.value1&&""!==r.value1||r.value2&&""!==r.value2||r.values&&0!==r.values.length)r.type=i.type;else switch(i.type){case e.SearchType.In:case e.SearchType.Contains:case e.SearchType.Equal:r.type=e.SearchType.IsNull;break;default:r.type=e.SearchType.IsNotNull}t.form.searchCacheSearchPane[n]=r})))},t.prototype.reset=function(){var e=this;this.form.define.fields.forEach((function(t){e.form.searchCacheSearchPane[t.name]=e.form.createSearchCacheField(t)}))},t.prototype.columnTableStateChange=function(e){this.tableState=e,this.tableData=m.process(this.showFields,this.tableState)},t.prototype.onColumnSearch=function(e){this.columnSearching?this.columnSearchValue=e:(this.columnSearching=!0,this.onShowItemChange(e),this.columnSearching=!1)},t.prototype.onShowItemChange=function(e){var t=this;if(void 0===e&&(e=""),this.form&&this.form.visibleFields){var n=[],i=this.form.visibleFields.length;this.form.define.searchInfo&&Object.keys(this.form.define.searchInfo).forEach((function(e){n.push(t.form.define.fieldByNames[e])})),e=e.toLowerCase(),this.showFields.forEach((function(t){""!==e&&-1===t.caption.toLowerCase().indexOf(e)||-1===n.indexOf(t)&&n.push(t)})),this.form.visibleFields.forEach((function(t){t.searchable&&(""!==e&&-1===t.caption.toLowerCase().indexOf(e)||-1===n.indexOf(t)&&n.length<50&&n.push(t))})),this.columnSearchValue&&(e=this.columnSearchValue,this.columnSearchValue=null,this.onShowItemChange(e)),this.tableData={data:n,total:i}}},t}();qe.decorators=[{type:t.Component,args:[{selector:"gc-search-pane",template:'<kendo-textbox\r\n  *ngIf="showFields && showFields.length > 10"\r\n  style="width: 100%;margin-bottom: 8px;"\r\n  placeholder="Search field filter"\r\n  [clearButton]="true"\r\n  (valueChange)="onColumnSearch($event)">\r\n  <ng-template kendoTextBoxSuffixTemplate>\r\n    <kendo-textbox-separator></kendo-textbox-separator>\r\n    <button kendoButton look="clear" [icon]="\'search\'"></button>\r\n  </ng-template>\r\n</kendo-textbox>\r\n<kendo-grid\r\n  [hideHeader]="true"\r\n  [data]="tableData"\r\n  [skip]="tableState.skip"\r\n  [pageSize]="tableState.take"\r\n  [pageable]="false"\r\n  [sortable]="true"\r\n  [filterable]="false"\r\n  [filter]="tableState.filter"\r\n  (dataStateChange)="columnTableStateChange($event)"\r\n  [sort]="tableState.sort"\r\n  [height]="height" [style]="{width: width + \'px\'}">\r\n\r\n  <kendo-grid-column title="{{ lang.define.lib.column }}"  filter="text" field="caption">\r\n    <ng-template kendoGridCellTemplate let-field>\r\n        <span style="font-weight: bold;" [style.color]="form.define.searchInfo && form.define.searchInfo[field.name] ? \'blue\' : null">\r\n          {{ field.groupName ? field.groupName + \' / \' : \'\' }}{{ field.caption }}\r\n        </span>\r\n        <span style="color: red" *ngIf="field.searchRequireMark" [innerHTML]="field.searchRequireMark"></span>\r\n    </ng-template>\r\n  </kendo-grid-column>\r\n  <kendo-grid-column  [width]="140">\r\n    <ng-template kendoGridCellTemplate let-field>\r\n      <gc-filter-item-condition [field]="field" [form]="form"></gc-filter-item-condition>\r\n    </ng-template>\r\n  </kendo-grid-column>\r\n  <kendo-grid-column [width]="380">\r\n    <ng-template kendoGridCellTemplate let-field>\r\n      <gc-filter-item-value [field]="field" [form]="form"></gc-filter-item-value>\r\n    </ng-template>\r\n  </kendo-grid-column>\r\n</kendo-grid>\r\n\r\n',styles:[".field-table{width:100%;border:none}.field-table td{padding:5px 0 5px 5px;height:40px}.field-table th{width:10px;white-space:nowrap;padding-right:20px;text-align:left}.field-required{padding-left:5px;color:red}"]}]}],qe.ctorParameters=function(){return[{type:me}]},qe.propDecorators={width:[{type:t.Input}],form:[{type:t.Input}],height:[{type:t.Input}]};var je=function(e){return"tr"===e.tagName.toLowerCase()},Ke=je,Ue=function(e,t){for(;e&&!t(e);)e=e.parentNode;return e},Ge=Ue,He=function(){function e(e,n,i){this.lang=e,this.renderer=n,this.zone=i,this.columnSettingPhpCode=null,this.visibleChange=new t.EventEmitter,this.title="",this.width=null,this.tableState={take:100,skip:0},this.dialogVisible=!1,this.height=null}return Object.defineProperty(e.prototype,"visible",{get:function(){return this.dialogVisible},set:function(e){e&&this.init(),this.dialogVisible=e},enumerable:!1,configurable:!0}),e.prototype.ngOnInit=function(){},e.prototype.close=function(){this.visibleChange.emit(!1),this.dialogVisible=!1},e.prototype.saveSetting=function(){this.form.formSettingMode=1,this.form.formSettingSelectedSave=this.form.formSettingSelected,this.form.formSettingVisible=!0},e.prototype.load=function(){var e=this;this.showFields=[],this.visibleFields=this.form.visibleFields,this.form.define.fields.forEach((function(t){t.show&&!t.hidden&&e.showFields.push(t)}))},e.prototype.init=function(){this.form&&this.form.define&&(this.height=window.innerHeight-200-60,this.height<0&&(this.height=200),this.load(),this.tableData=m.process(this.showFields,this.tableState))},e.prototype.columnTableStateChange=function(e){var t=this;this.tableState=e,this.tableData=m.process(this.showFields,this.tableState),this.currentSubscription.unsubscribe(),this.zone.onStable.pipe(d.take(1)).subscribe((function(){return t.currentSubscription=t.handleDragAndDrop()}))},e.prototype.tabSelect=function(e){0===e.index&&this.init(),this.visibleFields=this.form.visibleFields},e.prototype.selectAll=function(e,t){this.visibleFields.forEach((function(n){1===e?n.show=t:n.excel=t}))},e.prototype.resetSetting=function(){var e=this;this.form.resetSetting((function(){setTimeout((function(){e.init()}),10)}))},e.prototype.onShowItemChange=function(e){if(""!==e){var t=[];e=e.toLowerCase(),this.form.visibleFields.forEach((function(n){(-1!==n.caption.toLowerCase().indexOf(e)||n.groupName&&-1!==n.groupName.toLowerCase().indexOf(e))&&t.push(n)})),this.visibleFields=t}else this.visibleFields=this.form.visibleFields},e.prototype.ngOnDestroy=function(){this.currentSubscription&&this.currentSubscription.unsubscribe()},e.prototype.rowCallback=function(e){return{dragging:e.dataItem.dragging}},e.prototype.handleDragAndDrop=function(){var e,t,n=this,r=new i.Subscription((function(){}));return Array.from(document.querySelectorAll(".k-grid tr")).forEach((function(a){n.renderer.setAttribute(a,"draggable","true");var l=i.fromEvent(a,"dragstart"),o=i.fromEvent(a,"dragover"),s=i.fromEvent(a,"dragend");r.add(l.pipe(d.tap((function(e){var t=e.dataTransfer;try{var n=document.createElement("span");n.setAttribute("style","position: absolute; display: block; top: 0; left: 0; width: 0; height: 0;"),document.body.appendChild(n),t.setDragImage(n,0,0)}catch(e){}try{t.setData("application/json","{}")}catch(e){}}))).subscribe((function(i){var r=i.target;e=r.rowIndex,n.tableData.data[e].dragging=!0,t=e}))),r.add(o.subscribe((function(t){t.preventDefault();var i=n.tableData.data.splice(e,1)[0],r=Ue(t.target,je).rowIndex;e=r,n.zone.run((function(){return n.tableData.data.splice(r,0,i)}))}))),r.add(s.subscribe((function(i){i.preventDefault();var r=n.tableData.data[e];r.dragging=!1,n.form.columnSwap(r,t,e)})))})),r},e}();He.decorators=[{type:t.Component,args:[{selector:"gc-column-pane",template:'<kendo-dialog *ngIf="dialogVisible" (close)="close()"\r\n              [title]="title">\r\n  <div *ngIf="columnSettingPhpCode"\r\n       style="max-height: 400px;overflow-y: auto;max-width: 1200px; overflow-x: auto;\r\n       white-space: pre-line;\r\n       word-wrap: break-word;">\r\n    <pre>{{ columnSettingPhpCode }}</pre>\r\n  </div>\r\n  <ng-template [ngIf]="!columnSettingPhpCode">\r\n    <kendo-tabstrip (tabSelect)="tabSelect($event)">\r\n      <kendo-tabstrip-tab [selected]="true" title="{{lang.define.lib.column}}">\r\n        <ng-template kendoTabContent>\r\n          <kendo-grid [data]="tableData"\r\n                      [skip]="tableState.skip"\r\n                      [pageSize]="tableState.take"\r\n                      [pageable]="false"\r\n                      [sortable]="true"\r\n                      [rowClass]="rowCallback"\r\n                      filterable="menu"\r\n                      [filter]="tableState.filter"\r\n                      (dataStateChange)="columnTableStateChange($event)"\r\n                      [sort]="tableState.sort"\r\n                      [height]="height" style="width: 800px;">\r\n            <kendo-grid-column title="{{ lang.define.lib.column }}"  [width]="300" filter="text" field="caption">\r\n              <ng-template kendoGridCellTemplate let-field>\r\n                <strong>{{ field.groupName ? field.groupName + \' / \' : \'\' }}{{ field.caption }}</strong>\r\n              </ng-template>\r\n            </kendo-grid-column>\r\n            <kendo-grid-column title="{{ lang.define.lib.locked }}"\r\n                               [style]="{textAlign: \'center\'}"\r\n                               filter="boolean" field="locked">\r\n              <ng-template kendoGridCellTemplate let-field>\r\n                <input type="checkbox" kendoCheckBox  [(ngModel)]="field[\'locked\']"/>\r\n              </ng-template>\r\n            </kendo-grid-column>\r\n            <kendo-grid-column title="{{ lang.define.lib.view }}"\r\n                               [style]="{textAlign: \'center\'}"\r\n                               filter="boolean" field="show">\r\n              <ng-template kendoGridCellTemplate let-field>\r\n                <input type="checkbox" kendoCheckBox  [(ngModel)]="field.show"/>\r\n              </ng-template>\r\n            </kendo-grid-column>\r\n\x3c!--            <kendo-grid-column title="{{ lang.define.lib.excel }}"--\x3e\r\n\x3c!--                               [style]="{textAlign: \'center\'}"--\x3e\r\n\x3c!--                               filter="boolean" field="excel">--\x3e\r\n\x3c!--              <ng-template kendoGridCellTemplate let-field>--\x3e\r\n\x3c!--                <input type="checkbox" kendoCheckBox  [(ngModel)]="field[\'excel\']"/>--\x3e\r\n\x3c!--              </ng-template>--\x3e\r\n\x3c!--            </kendo-grid-column>--\x3e\r\n            <kendo-grid-column title="{{ lang.define.lib.width }}"  [width]="150"  filter="numeric" field="width">\r\n              <ng-template kendoGridCellTemplate let-field>\r\n                <kendo-textbox [(ngModel)]="field[\'width\']" style="width: 100%"></kendo-textbox>\r\n              </ng-template>\r\n            </kendo-grid-column>\r\n          </kendo-grid>\r\n        </ng-template>\r\n      </kendo-tabstrip-tab>\r\n\r\n      <kendo-tabstrip-tab title="{{lang.define.lib.shownItem}}">\r\n        <ng-template kendoTabContent>\r\n          <div style="height: 50px;overflow-y: hidden;overflow-x: hidden; width:800px;">\r\n            <kendo-textbox\r\n              style="width: 100%;"\r\n              placeholder="Filter"\r\n              [clearButton]="true"\r\n              (valueChange)="onShowItemChange($event)">\r\n              <ng-template kendoTextBoxSuffixTemplate>\r\n                <kendo-textbox-separator></kendo-textbox-separator>\r\n                <button kendoButton look="clear" [icon]="\'search\'"></button>\r\n              </ng-template>\r\n            </kendo-textbox>\r\n          </div>\r\n          <div [style.height]="(height-50) + \'px\'" style="overflow-y: auto;overflow-x: hidden; width:800px;">\r\n            <div class="row">\r\n              <ng-container *ngFor="let field of visibleFields">\r\n                <div class="col-4" style="padding-bottom: 4px;padding-top: 4px;" *ngIf="!field.hidden">\r\n                  <input type="checkbox" kendoCheckBox\r\n                         [(ngModel)]="field.show"/>&nbsp;\r\n                  {{ field.groupName ? field.groupName + \' / \' : \'\' }}{{ field.caption }}\r\n                </div>\r\n              </ng-container>\r\n            </div>\r\n          </div>\r\n        </ng-template>\r\n      </kendo-tabstrip-tab>\r\n\r\n      <kendo-tabstrip-tab title="{{lang.define.lib.excelItem}}" *ngIf="form.define.optionExcel && form.excelColumnSelectable">\r\n        <ng-template kendoTabContent>\r\n          <div style="height: 50px;overflow-y: hidden;overflow-x: hidden; width:800px;">\r\n            <kendo-textbox\r\n              style="width: 100%;"\r\n              placeholder="Filter"\r\n              [clearButton]="true"\r\n              (valueChange)="onShowItemChange($event)">\r\n              <ng-template kendoTextBoxSuffixTemplate>\r\n                <kendo-textbox-separator></kendo-textbox-separator>\r\n                <button kendoButton look="clear" [icon]="\'search\'"></button>\r\n              </ng-template>\r\n            </kendo-textbox>\r\n          </div>\r\n          <div [style.height]="(height-50) + \'px\'" style="overflow-y: auto;overflow-x: hidden; width:800px;">\r\n            <div class="row">\r\n              <div class="col-4" *ngFor="let field of visibleFields"\r\n                   style="padding-bottom: 4px;padding-top: 4px;">\r\n                <input type="checkbox" kendoCheckBox\r\n                       [(ngModel)]="field.excel"/>&nbsp;\r\n                {{ field.groupName ? field.groupName + \' / \' : \'\' }}{{ field.caption }}\r\n              </div>\r\n            </div>\r\n          </div>\r\n\x3c!--          <div style="padding-top: 8px; height: 40px;overflow-y: hidden;overflow-x: hidden; width:800px;text-align: right ">--\x3e\r\n\x3c!--            <button kendoButton (click)="selectAll(2, true)" [primary]="true">{{ lang.define.lib.selectAll }}</button>&nbsp;--\x3e\r\n\x3c!--            <button kendoButton (click)="selectAll(2, false)">{{ lang.define.lib.deselectAll }}</button>--\x3e\r\n\x3c!--          </div>--\x3e\r\n        </ng-template>\r\n      </kendo-tabstrip-tab>\r\n\r\n    </kendo-tabstrip>\r\n\r\n\r\n  </ng-template>\r\n  <kendo-dialog-actions>\r\n    <button kendoButton (click)="resetSetting()">{{lang.define.lib.resetSetting}}</button>\r\n    <button kendoButton [primary]="true" (click)="saveSetting()">{{lang.define.lib.saveSetting}}</button>\r\n    <button kendoButton [primary]="false" (click)="close()">{{lang.define.lib.close}}</button>\r\n  </kendo-dialog-actions>\r\n</kendo-dialog>\r\n',encapsulation:t.ViewEncapsulation.None,styles:[".k-grid tr.dragging{background-color:rgba(19,104,140,.6)}"]}]}],He.ctorParameters=function(){return[{type:me},{type:t.Renderer2},{type:t.NgZone}]},He.propDecorators={columnSettingPhpCode:[{type:t.Input}],visible:[{type:t.Input}],visibleChange:[{type:t.Output}],title:[{type:t.Input}],width:[{type:t.Input}],form:[{type:t.Input}]};var ze=function(){function t(t){this.lang=t,this.FieldTypeEnum=e.FieldType,this.arrayListItems=[{text:this.lang.define.lib.include,value:e.SearchType.In},{text:this.lang.define.lib.exclude,value:e.SearchType.NotIn},{text:this.lang.define.lib.isNull,value:e.SearchType.IsNull},{text:this.lang.define.lib.isNotNull,value:e.SearchType.IsNotNull}],this.boolListItems=[{text:"=",value:e.SearchType.Equal},{text:"<>",value:e.SearchType.NotEqual},{text:this.lang.define.lib.isNull,value:e.SearchType.IsNull},{text:this.lang.define.lib.isNotNull,value:e.SearchType.IsNotNull}],this.stringListItems=[{text:"=",value:e.SearchType.Equal},{text:"<>",value:e.SearchType.NotEqual},{text:this.lang.define.lib.contains,value:e.SearchType.Contains},{text:this.lang.define.lib.notContains,value:e.SearchType.NotContains},{text:this.lang.define.lib.startWith,value:e.SearchType.StartWith},{text:this.lang.define.lib.endWith,value:e.SearchType.EndWith},{text:this.lang.define.lib.isNull,value:e.SearchType.IsNull},{text:this.lang.define.lib.isNotNull,value:e.SearchType.IsNotNull}],this.dateListItems=[{text:this.lang.define.lib.between,value:e.SearchType.In},{text:this.lang.define.lib.outside,value:e.SearchType.NotIn},{text:this.lang.define.lib.isNull,value:e.SearchType.IsNull},{text:this.lang.define.lib.isNotNull,value:e.SearchType.IsNotNull}],this.numberListItems=[{text:this.lang.define.lib.between,value:e.SearchType.In},{text:this.lang.define.lib.outside,value:e.SearchType.NotIn},{text:"=",value:e.SearchType.Equal},{text:"<>",value:e.SearchType.NotEqual},{text:this.lang.define.lib.isNull,value:e.SearchType.IsNull},{text:this.lang.define.lib.isNotNull,value:e.SearchType.IsNotNull}]}return t.prototype.ngOnInit=function(){},t}();ze.decorators=[{type:t.Component,args:[{selector:"gc-filter-item-condition",template:'\x3c!--List values--\x3e\r\n<ng-container *ngIf="field.listValues;else autoCompleteField">\r\n  <kendo-dropdownlist\r\n    style="width: 100%"\r\n    [tabIndex]="-1"\r\n    [(value)]="form.searchCacheSearchPane[field.name].type" [data]="arrayListItems" [valuePrimitive]="true" textField="text" valueField="value"></kendo-dropdownlist>\r\n</ng-container>\r\n\r\n\x3c!--List list name--\x3e\r\n<ng-template #autoCompleteField>\r\n  <ng-container *ngIf="field.listName && !field.autocomplete;else checkField">\r\n    <kendo-dropdownlist\r\n      style="width: 100%"\r\n      [tabIndex]="-1"\r\n      [(value)]="form.searchCacheSearchPane[field.name].type" [data]="arrayListItems"\r\n      [valuePrimitive]="true" textField="text" valueField="value"></kendo-dropdownlist>\r\n  </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #checkField>\r\n  <ng-container *ngIf="field.listName;else normalField">\r\n    <ng-container *ngIf="form.searchCacheSearchPane[field.name]">\r\n      <kendo-dropdownlist\r\n        style="width: 100%"\r\n        [tabIndex]="-1"\r\n        [(value)]="form.searchCacheSearchPane[field.name].type"\r\n        [data]="stringListItems" [valuePrimitive]="true" textField="text" valueField="value"></kendo-dropdownlist>\r\n    </ng-container>\r\n  </ng-container>\r\n</ng-template>\r\n\r\n\x3c!--Normal field--\x3e\r\n<ng-template #normalField>\r\n  <ng-container [ngSwitch]="field.type">\r\n    \x3c!-- the same view can be shown in more than one case --\x3e\r\n    <ng-container *ngSwitchCase="field.type == FieldTypeEnum.DateTime || field.type == FieldTypeEnum.Date ? field.type: -1">\r\n      <kendo-dropdownlist\r\n        style="width: 100%"\r\n        [tabIndex]="-1"\r\n        [(value)]="form.searchCacheSearchPane[field.name].type" [data]="dateListItems" [valuePrimitive]="true" textField="text" valueField="value"></kendo-dropdownlist>\r\n    </ng-container>\r\n    <ng-container *ngSwitchCase="field.type === FieldTypeEnum.Float || field.type === FieldTypeEnum.Int ? field.type : -1">\r\n      <kendo-dropdownlist\r\n        style="width: 100%"\r\n        [tabIndex]="-1"\r\n        [(value)]="form.searchCacheSearchPane[field.name].type" [data]="numberListItems" [valuePrimitive]="true" textField="text" valueField="value"></kendo-dropdownlist>\r\n    </ng-container>\r\n    <ng-container *ngSwitchCase="FieldTypeEnum.Boolean">\r\n      <kendo-dropdownlist\r\n        style="width: 100%"\r\n        [tabIndex]="-1"\r\n        [(value)]="form.searchCacheSearchPane[field.name].type" [data]="boolListItems" [valuePrimitive]="true" textField="text" valueField="value"></kendo-dropdownlist>\r\n    </ng-container>\r\n\r\n    <ng-container *ngSwitchDefault>\r\n      <ng-container *ngIf="form.searchCacheSearchPane[field.name]">\r\n        <kendo-dropdownlist\r\n          style="width: 100%"\r\n          [tabIndex]="-1"\r\n          [(value)]="form.searchCacheSearchPane[field.name].type"  [data]="stringListItems" [valuePrimitive]="true" textField="text" valueField="value"></kendo-dropdownlist>\r\n      </ng-container>\r\n    </ng-container>\r\n  </ng-container>\r\n</ng-template>\r\n',styles:["kendo-dropdownlist{width:120px}"]}]}],ze.ctorParameters=function(){return[{type:me}]},ze.propDecorators={field:[{type:t.Input}],form:[{type:t.Input}]};var _e=function(){function t(t){this.lang=t,this.FieldTypeEnum=e.FieldType,this.dateFormat=ue.dateFormat,this.dateTimeFormat=ue.dateTimeFormat,this.config=ue,this.boolValueListItems=[{text:"",value:null},{text:this.lang.define.lib.yes,value:1},{text:this.lang.define.lib.no,value:0}]}return t.prototype.ngOnInit=function(){},t.prototype.getNumberFormat=function(){return pe.createNumberFormat(this.field.decimal)},t.prototype.onFocus=function(){this.form.loadSearchListValues(this.field.name,!0)},t}();_e.decorators=[{type:t.Component,args:[{selector:"gc-filter-item-value",template:'\x3c!--List values--\x3e\r\n<ng-container *ngIf="field.listValues;else autoCompleteField">\r\n  <gc-multi-select\r\n    [attr.controls]="\'search_field_\' + field.name"\r\n    [listKendo]="field.listKendoValues"\r\n                   [(values)]="form.searchCacheSearchPane[field.name].values">\r\n  </gc-multi-select>\r\n</ng-container>\r\n\r\n\x3c!--List list name--\x3e\r\n<ng-template #autoCompleteField>\r\n  <ng-container *ngIf="field.listName && !field.autocomplete;else checkField">\r\n    <ng-container *ngIf="field.tree; else notTree">\r\n      <gc-multi-select\r\n        [attr.controls]="\'search_field_\' + field.name"\r\n        [listKendo]="form.define.optionsMap[field.listName + \'_tree\']"\r\n                       [(values)]="form.searchCacheSearchPane[field.name].values">\r\n      </gc-multi-select>\r\n    </ng-container>\r\n    <ng-template #notTree>\r\n      <gc-multi-select\r\n        [attr.controls]="\'search_field_\' + field.name"\r\n        [form]="form.define"\r\n        [field]="field"\r\n        (focus)="onFocus()"\r\n        [listKendo]="form.define.optionsMap[\'search_\' + field.listName]"\r\n                       [dropdownWidth]="field.dropdownWidth"\r\n                       [(values)]="form.searchCacheSearchPane[field.name].values">\r\n      </gc-multi-select>\r\n    </ng-template>\r\n  </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #checkField>\r\n  <ng-container *ngIf="field.listName;else normalField">\r\n    <ng-container *ngIf="form.searchCacheSearchPane[field.name]">\r\n      <input [attr.controls]="\'search_field_\' + field.name"\r\n             kendoTextBox type="text" [(ngModel)]="form.searchCacheSearchPane[field.name].value1">\r\n    </ng-container>\r\n  </ng-container>\r\n</ng-template>\r\n\r\n\x3c!--Normal field--\x3e\r\n<ng-template #normalField>\r\n  <ng-container [ngSwitch]="field.type">\r\n    \x3c!-- the same view can be shown in more than one case --\x3e\r\n    <ng-container *ngSwitchCase="field.type == FieldTypeEnum.Date ? field.type: -1">\r\n      <div class="row m-0" style="display: table;">\r\n        <div class="col-md-5 p-0">\r\n          <gc-date-picker\r\n            [attr.controls]="\'search_field_\' + field.name"\r\n            [(ngModel)]="form.searchCacheSearchPane[field.name].value1"\r\n          >\r\n          </gc-date-picker>\r\n        </div>\r\n        <div class="col-md-2 p-0" style="text-align: center;display: table-cell; vertical-align: middle;font-size: 120%;">~</div>\r\n        <div class="col-md-5 p-0" style="text-align: right;">\r\n          <gc-date-picker\r\n            [(ngModel)]="form.searchCacheSearchPane[field.name].value2"\r\n          >\r\n          </gc-date-picker>\r\n        </div>\r\n      </div>\r\n    </ng-container>\r\n\r\n    <ng-container *ngSwitchCase="field.type == FieldTypeEnum.DateTime ? field.type: -1">\r\n      <div class="row m-0" style="display: table;">\r\n        <div class="col-md-5 p-0">\r\n          <gc-date-picker\r\n            [time]="true"\r\n            [attr.controls]="\'search_field_\' + field.name"\r\n            [(ngModel)]="form.searchCacheSearchPane[field.name].value1"\r\n          >\r\n          </gc-date-picker>\r\n\r\n        </div>\r\n        <div class="col-md-2 p-0" style="text-align: center;display: table-cell; vertical-align: middle;font-size: 120%;">~</div>\r\n        <div class="col-md-5 p-0" style="text-align: right;">\r\n          <gc-date-picker\r\n            [time]="true"\r\n            [(ngModel)]="form.searchCacheSearchPane[field.name].value2"\r\n          >\r\n          </gc-date-picker>\r\n\r\n        </div>\r\n      </div>\r\n    </ng-container>\r\n\r\n    <ng-container *ngSwitchCase="field.type === FieldTypeEnum.Float || field.type === FieldTypeEnum.Int ? field.type : -1">\r\n      <div class="row m-0" style="display: table;">\r\n        <div class="col-md-5 p-0">\r\n          <kendo-numerictextbox\r\n            [attr.controls]="\'search_field_\' + field.name"\r\n            [spinners]="false" [(ngModel)]="form.searchCacheSearchPane[field.name].value1" [format]="getNumberFormat()"></kendo-numerictextbox>\r\n        </div>\r\n        <div class="col-md-2 p-0" style="text-align: center;display: table-cell; vertical-align: middle;font-size: 120%;">~</div>\r\n        <div class="col-md-5 p-0" style="text-align: right;">\r\n          <kendo-numerictextbox  [spinners]="false" [(ngModel)]="form.searchCacheSearchPane[field.name].value2" [format]="getNumberFormat()"></kendo-numerictextbox>\r\n        </div>\r\n      </div>\r\n    </ng-container>\r\n    <ng-container *ngSwitchCase="FieldTypeEnum.Boolean">\r\n      <kendo-dropdownlist\r\n        [attr.controls]="\'search_field_\' + field.name"\r\n        textField="text"\r\n        valueField="value"\r\n        [valuePrimitive]="true"\r\n        [(ngModel)]="form.searchCacheSearchPane[field.name].value1" [data]="boolValueListItems"></kendo-dropdownlist>\r\n    </ng-container>\r\n    <ng-container *ngSwitchDefault>\r\n      <ng-container *ngIf="form.searchCacheSearchPane[field.name]">\r\n        <input\r\n          [attr.controls]="\'search_field_\' + field.name"\r\n          kendoTextBox type="text" [(ngModel)]="form.searchCacheSearchPane[field.name].value1" style="width: 100%;">\r\n      </ng-container>\r\n    </ng-container>\r\n  </ng-container>\r\n</ng-template>\r\n',styles:["kendo-datepicker,kendo-numerictextbox{width:150px}"]}]}],_e.ctorParameters=function(){return[{type:me}]},_e.propDecorators={field:[{type:t.Input}],form:[{type:t.Input}]};var $e=function(){function e(e,t){this.lang=e,this.message=t,this.menuCount=0,this.menuDefault=null,this.menuButtonIcon="more-horizontal"}return e.prototype.ngOnInit=function(){if(this.grid){var e=0,t="",n=this.grid;n.view&&!n.enableMasterDetail&&(e++,t="align-justify",this.menuDefault="view"),n.define.optionInsert&&n.define.optionCopy&&!n.enableMasterDetail&&(e++,t="copy",this.menuDefault="copy"),n.define.optionDelete&&(e++,t="trash",this.menuDefault="delete"),1!==e||this.grid.inlineItem&&this.grid.inlineItem.items||(this.menuButtonIcon=t,this.menuCount=e)}},e.prototype.onMenuSelect=function(e){switch(e.item.data){case"edit":return void this.grid.startEdit(this.record.serial,{ctrlKey:!0});case"delete":return void this.grid.delete(this.record.serial);case"add":return void this.grid.startInsert(null);case"copy":return void this.grid.startCopy(this.record.serial);case"view":return void this.grid.viewDetail(this.record.serial);case"excel":return void this.grid.excel()}if(this.grid.inlineItem){var t=e.item.data,n=this.grid.inlineItem.items.find((function(e){return e.name&&e.name===t||e.buttonCaption&&e.buttonCaption===t||e.buttonTitle&&e.buttonTitle===t}));n&&n.action(this.record,e.originalEvent)}},e}();$e.decorators=[{type:t.Component,args:[{selector:"gc-row-button-pane",template:'<div style="white-space: nowrap;text-align: center;margin-left:-2px" *ngIf="grid && grid.define && grid.data && grid.data.length > 0">\r\n  <ng-container *ngIf="!grid.editCache[record.serial][\'edit\']; else saveTpl">\r\n    <button kendoButton icon="edit" *ngIf="grid.define.optionUpdate"\r\n            [disabled]="grid.isEditable && !grid.isEditable(record)"\r\n            (click)="grid.startEdit(record.serial, $event)"></button>\r\n    <button kendoButton [icon]="menuButtonIcon"\r\n            *ngIf="menuCount===1"\r\n            (click)="onMenuSelect({ item: {data: menuDefault} })"\r\n    ></button>\r\n    <ng-template [ngIf]="\r\n          grid.inlineItem ||\r\n          (menuCount !== 1 && (grid.view||(grid.define.optionInsert && grid.define.optionCopy)||grid.define.optionDelete))">\r\n      <button kendoButton [icon]="menuButtonIcon" #target></button>\r\n      <kendo-contextmenu [target]="target" showOn="click" (select)="onMenuSelect($event)">\r\n        <kendo-menu-item text="{{ lang.define.lib.view }}" icon="align-justify" data="view"\r\n                         *ngIf="grid.view && !grid.enableMasterDetail"></kendo-menu-item>\r\n        \x3c!--      <kendo-menu-item text="{{ lang.define.lib.edit }}" icon="edit" data="edit"--\x3e\r\n        \x3c!--                       *ngIf="grid.define.optionUpdate && !grid.enableMasterDetail" ></kendo-menu-item>--\x3e\r\n        <kendo-menu-item text="{{ lang.define.lib.copy }}" icon="copy" data="copy"\r\n                         *ngIf="grid.define.optionInsert && grid.define.optionCopy && !grid.enableMasterDetail" ></kendo-menu-item>\r\n\r\n        <kendo-menu-item text="{{ lang.define.lib.delete }}"\r\n                         [disabled]="grid.isDeletable && !grid.isDeletable(record)"\r\n                         icon="trash" data="delete" *ngIf="grid.define.optionDelete" ></kendo-menu-item>\r\n\x3c!--        <kendo-menu-item [separator]="true" *ngIf="grid.define.optionInsert"></kendo-menu-item>--\x3e\r\n\x3c!--        <kendo-menu-item text="{{ lang.define.lib.add }}" icon="plus" data="add" *ngIf="grid.define.optionInsert" ></kendo-menu-item>--\x3e\r\n\r\n        <ng-template [ngIf]="grid.inlineItem && grid.inlineItem.items && grid.inlineItem.items.length">\r\n          <kendo-menu-item [separator]="true" *ngIf="(menuCount !== 1 && (grid.view||(grid.define.optionInsert && grid.define.optionCopy)||grid.define.optionDelete))"></kendo-menu-item>\r\n          <ng-container *ngFor="let button of grid.inlineItem.items; let i=index">\r\n            <kendo-menu-item text="{{ button.buttonCaption?button.buttonCaption:button.buttonTitle }}"\r\n                             [icon]="button.buttonIcon"\r\n                             data="{{ button.name ? button.name : (button.buttonCaption?button.buttonCaption:button.buttonTitle)}}"\r\n                             [disabled]="button.visible && !button.visible(record)"\r\n                             *ngIf="button.type===\'button\'"\r\n            ></kendo-menu-item>\r\n          </ng-container>\r\n        </ng-template>\r\n      </kendo-contextmenu>\r\n    </ng-template>\r\n\r\n  </ng-container>\r\n  <ng-template #saveTpl>\r\n    <button kendoButton icon="save" [primary]="true" (click)="grid.save(record.serial)"></button>\r\n    <button kendoButton icon="close" [primary]="false" (click)="grid.cancelEdit(record.serial);"></button>\r\n  </ng-template>\r\n\r\n</div>\r\n\r\n',styles:["button{margin-left:2px}"]}]}],$e.ctorParameters=function(){return[{type:me},{type:ye}]},$e.propDecorators={grid:[{type:t.Input}],record:[{type:t.Input}]};var Je=function(){function e(e){this.lang=e,this.height=400,this.colDiv=5}return Object.defineProperty(e.prototype,"cols",{get:function(){return 0===this.colDiv?0:12/(this.colDiv+1)},set:function(e){this.colDiv=e>0?12/e-1:11},enumerable:!1,configurable:!0}),e.prototype.ngOnInit=function(){},e}();Je.decorators=[{type:t.Component,args:[{selector:"gc-master-detail-pane",template:'<div class="row" *ngIf="form && values && form.editCache[values.serial].edit"\r\n     [style]="{minWidth: \'600px\', maxWidth: \'1200px\'}"\r\n     kendoTooltip>\r\n  <ng-container *ngFor="let field of form.define.fields">\r\n    <ng-template [ngIf]="field.editable">\r\n      <div class="col-md-12 col-sm-12 field-block" *ngIf="field.groupName && field.groupFirstItem">\r\n        <h2 class="group-name">{{ field.groupName }}</h2>\r\n      </div>\r\n      <div class="col-md-{{ colDiv }} col-sm-12 field-block">\r\n        <div class="field-label">{{ field.caption }}<span *ngIf="field.required" class="field-required">*{{ field.requiredGroup }}</span></div>\r\n        <ng-template [ngIf]="!form.userFields[field.name] || (form.fieldEditable(values.serial, field)\r\n          && form.userFields[field.name].mode==\'view\') ||\r\n          (!form.fieldEditable(values.serial, field) && form.userFields[field.name].mode==\'edit\')"\r\n                     [ngIfElse]="custom">\r\n          <gc-field\r\n                  [alignByDataType]="false"\r\n            [apiUrl]="form.apiUrl"\r\n            [link]="form.links?form.links[field.name]:null"\r\n            [form]="form.define"\r\n            [define]="field"\r\n            [record]="values"\r\n            [(value)]="values[field.name]"\r\n            [editable]="form.fieldEditable(values.serial, field, true)"\r\n            (changed)="form.onFieldValueChange($event, values.serial, field.name)"\r\n            (detailMultiSelect)="form.openMultiSelectDetail($event)"\r\n          ></gc-field>\r\n        </ng-template>\r\n        <ng-template #custom>\r\n          <ng-template [ngTemplateOutlet]="form.userFields[field.name].template"\r\n                       [ngTemplateOutletContext]="{$implicit: values, editable: true, field: field}"></ng-template>\r\n        </ng-template>\r\n      </div>\r\n\r\n    </ng-template>\r\n  </ng-container>\r\n</div>\r\n\r\n<div class="row" *ngIf="form && values && !form.editCache[values.serial].edit"\r\n     [style]="{minWidth: \'800px\', maxWidth: \'1200px\', overflowY: \'auto\'}"\r\n     kendoTooltip>\r\n  <ng-container *ngFor="let field of form.define.fields">\r\n    <ng-template [ngIf]="!field.hidden && values[field.name] || field.editMode">\r\n      <div class="col-md-12 col-sm-12 field-block" *ngIf="field.groupName && field.groupFirstItem">\r\n        <h2 class="group-name">{{ field.groupName }}</h2>\r\n      </div>\r\n      <div class="col-md-{{colDiv}} col-sm-12 field-block">\r\n        <div class="field-label">{{ field.caption }}<span *ngIf="field.required" class="field-required">*{{ field.requiredGroup }}</span></div>\r\n        <ng-template [ngIf]="!form.userFields[field.name] || (form.fieldEditable(values.serial, field)\r\n        && form.userFields[field.name].mode==\'view\') ||\r\n        (!form.fieldEditable(values.serial, field) && form.userFields[field.name].mode==\'edit\')"\r\n                     [ngIfElse]="custom">\r\n          <gc-field\r\n                  [alignByDataType]="false"\r\n            [apiUrl]="form.apiUrl"\r\n            [link]="form.links?form.links[field.name]:null"\r\n            [form]="form.define"\r\n            [define]="field"\r\n            [record]="values"\r\n            [(value)]="values[field.name]"\r\n            [editable]="form.fieldEditable(values.serial, field, true)"\r\n            (changed)="form.onFieldValueChange($event, values.serial, field.name)"\r\n            (detailMultiSelect)="form.openMultiSelectDetail($event)"\r\n          ></gc-field>\r\n        </ng-template>\r\n        <ng-template #custom>\r\n          <ng-template [ngTemplateOutlet]="form.userFields[field.name].template"\r\n                       [ngTemplateOutletContext]="{$implicit: values, editable: true, field: field}"></ng-template>\r\n        </ng-template>\r\n      </div>\r\n\r\n    </ng-template>\r\n  </ng-container>\r\n</div>\r\n\r\n<button *ngIf="form.editCache[values.serial].edit"\r\n        kendoButton icon="save" [primary]="true"\r\n        (click)="form.save(values.serial)">{{ lang.define.lib.save }}</button>\r\n',styles:[".field-block{margin-bottom:20px}.field-label{font-weight:700;margin-bottom:8px}.field-table{width:100%;width:auto;border:none;border-collapse:collapse}.field-table td,th{height:25px;border:2px solid #e1e1e1}.field-table td{background-color:#fff;width:70%;padding:10px;border:2px solid #e1e1e1;min-width:300px;touch-action:auto}.field-table th{background-color:#f9f9f9;width:30%;font-weight:700;white-space:nowrap;padding-right:20px;text-align:left;border:2px solid #e1e1e1;min-width:150px}.field-required{padding-left:5px;color:red}.field-panel{padding:10px}input{touch-action:auto}::-webkit-scrollbar{width:10px}::-webkit-scrollbar-thumb{box-shadow:inset 0 0 10px 10px #6495ed;border:3px solid transparent}.header{min-height:30px;background-color:#00b0ff}.content{min-height:30px;background-color:#ff0}"]}]}],Je.ctorParameters=function(){return[{type:me}]},Je.propDecorators={form:[{type:t.Input}],height:[{type:t.Input}],values:[{type:t.Input}],cols:[{type:t.Input}]};var Ze=function(){function e(){}return e.prototype.ngOnInit=function(){},e.prototype.onMenuSelect=function(e){var t=e.item.data,n=this.item.items.find((function(e){return e.name&&e.name===t||e.buttonCaption&&e.buttonCaption===t||e.buttonTitle&&e.buttonTitle===t}));n&&n.action(this.record,e.originalEvent,this.grid)},e}();Ze.decorators=[{type:t.Component,args:[{selector:"gc-inline-item",template:'<div style="white-space: nowrap; text-align: left;">\r\n  <ng-template [ngIf]="!item.collapse">\r\n    <ng-container *ngFor="let button of item.items; let i=index">\r\n      <ng-template [ngIf]="!button.visible || button.visible(record)">\r\n        <ng-container [ngSwitch]="button.type">\r\n          <button *ngSwitchCase="\'button\'" kendoButton\r\n                  (click)="button.action(record, $event, grid)"\r\n                  [primary]="button.buttonPrimary!==false"\r\n                  [icon]="button.buttonIcon?button.buttonIcon:null"\r\n                  [title]="button.buttonTitle?button.buttonTitle:null"\r\n                  [imageUrl]="button.buttonImageUrl?button.buttonImageUrl:null"\r\n                  [style]="{marginRight: \'4px\'}"\r\n          >{{ button.buttonCaption?button.buttonCaption:\'\' }}</button>\r\n          <kendo-switch\r\n            *ngSwitchCase="\'switch\'"\r\n            style="margin-right: 4px;"\r\n            [(ngModel)]="record[button.name]"\r\n            (valueChange)="button.action(record, $event, grid)"></kendo-switch>\r\n        </ng-container>\r\n      </ng-template>\r\n    </ng-container>\r\n  </ng-template>\r\n  <ng-template [ngIf]="item.collapse">\r\n    <button kendoButton icon="more-horizontal" #target></button>\r\n    <kendo-contextmenu [target]="target" showOn="click" (select)="onMenuSelect($event)">\r\n      <ng-container *ngFor="let button of item.items; let i=index">\r\n        <kendo-menu-item text="{{ button.buttonCaption?button.buttonCaption:button.buttonTitle }}"\r\n                         [icon]="button.buttonIcon"\r\n                         data="{{ button.name ? button.name : (button.buttonCaption?button.buttonCaption:button.buttonTitle)}}"\r\n                         [disabled]="button.visible && !button.visible(record)"\r\n                         *ngIf="button.type===\'button\'"\r\n        ></kendo-menu-item>\r\n      </ng-container>\r\n    </kendo-contextmenu>\r\n    <ng-container *ngFor="let button of item.items; let i=index">\r\n      <ng-template [ngIf]="(!button.visible || button.visible(record)) && button.type===\'switch\'">\r\n        <kendo-switch\r\n          *ngSwitchCase="\'switch\'"\r\n          style="margin-right: 4px;"\r\n          [(ngModel)]="record[button.name]"\r\n          (valueChange)="button.action(record, $event, grid)"></kendo-switch>\r\n      </ng-template>\r\n    </ng-container>\r\n  </ng-template>\r\n</div>\r\n',styles:[""]}]}],Ze.ctorParameters=function(){return[]},Ze.propDecorators={grid:[{type:t.Input}],item:[{type:t.Input}],record:[{type:t.Input}]};var Xe=function(){function e(){}return e.prototype.ngOnInit=function(){},e}();Xe.decorators=[{type:t.Component,args:[{selector:"gc-setting-pane",template:'<kendo-dialog title="Setting"\r\n              [width]="800"\r\n              *ngIf="form.formSettingVisible" (close)="form.formSettingVisible=false">\r\n  <table style="width: 100%">\r\n    <tr>\r\n      <th style="width: 100%">Setting name</th>\r\n\x3c!--      <th style="width: 30%">Show in workspace</th>--\x3e\r\n    </tr>\r\n    <tr>\r\n      <td>\r\n        <input\r\n          [attr.controls]="\'setting_name_component\'"\r\n          *ngIf="form.formSettingMode===1"\r\n          [placeholder]="form.formSettingSelectedSaveDefault"\r\n          type="text" kendoTextBox style="width: 100%" [(ngModel)]="form.formSettingSelectedSave">\r\n        <kendo-dropdownlist\r\n          [attr.controls]="\'setting_name_component\'"\r\n          *ngIf="form.formSettingMode===0"\r\n          style="width: 100%;"\r\n          [data]="form.formSettingList"\r\n          [valuePrimitive]="true"\r\n          textField="text"\r\n          valueField="value"\r\n          [(ngModel)]="form.formSettingSelectedSave"\r\n        ></kendo-dropdownlist>\r\n      </td>\r\n\x3c!--      <td style="text-align: center">--\x3e\r\n\x3c!--        <input--\x3e\r\n\x3c!--          *ngIf="form.define.formSetting[form.formSettingSelectedSave]"--\x3e\r\n\x3c!--          type="checkbox" kendoCheckBox--\x3e\r\n\x3c!--          [disabled]="form.formSettingMode===0"--\x3e\r\n\x3c!--          [(ngModel)]="form.define.formSetting[form.formSettingSelectedSave].in_workspace">--\x3e\r\n\x3c!--        <input--\x3e\r\n\x3c!--          *ngIf="!form.define.formSetting[form.formSettingSelectedSave]"--\x3e\r\n\x3c!--          type="checkbox" kendoCheckBox--\x3e\r\n\x3c!--          [disabled]="form.formSettingMode===0"--\x3e\r\n\x3c!--          [(ngModel)]="form.formSettingInWorkspace">--\x3e\r\n\x3c!--      </td>--\x3e\r\n    </tr>\r\n  </table>\r\n\r\n  <kendo-dialog-actions layout="stretched">\r\n    <button kendoButton (click)="form.formSettingVisible=false">{{ form.lang.define.lib.close }}</button>\r\n    <button kendoButton\r\n            *ngIf="form.formSettingMode==0"\r\n            (click)="form.doFormSettingAction(true)"\r\n            [primary]="true">{{ form.lang.define.lib.delete }}</button>\r\n    <button kendoButton\r\n            (click)="form.doFormSettingAction()"\r\n            [primary]="true">{{ form.formSettingMode===0 ? form.lang.define.lib.apply : form.lang.define.lib.save }}</button>\r\n  </kendo-dialog-actions>\r\n</kendo-dialog>\r\n',styles:[""]}]}],Xe.ctorParameters=function(){return[]},Xe.propDecorators={form:[{type:t.Input}]};var Ye=function(){function e(e,n){this.lang=e,this.ngZone=n,this.visibleChange=new t.EventEmitter,this.title="",this.width=null,this.height=null,this.dialogVisible=!1}return Object.defineProperty(e.prototype,"visible",{get:function(){return this.dialogVisible},set:function(e){this.dialogVisible=e},enumerable:!1,configurable:!0}),e.prototype.ngOnInit=function(){},e.prototype.close=function(){this.form.showSearchPane||(this.visibleChange.emit(!1),this.dialogVisible=!1)},e}();Ye.decorators=[{type:t.Component,args:[{selector:"gc-search-pane-dialog",template:'<kendo-dialog *ngIf="dialogVisible" (close)="close()">\r\n  <kendo-dialog-titlebar>\r\n    <div style="font-size: 18px; line-height: 1.3em;">\r\n      <span class="k-icon k-i-search"></span>{{ title }}\r\n    </div>\r\n  </kendo-dialog-titlebar>\r\n\r\n  <gc-search-pane [width]="width" [form]="form" [height]="height" #pane></gc-search-pane>\r\n\r\n  <kendo-dialog-actions layout="stretched">\r\n    <button kendoButton icon="close" (click)="close()" *ngIf="form && !form.showSearchPane">{{ lang.define.lib.close }}</button>\r\n    <button kendoButton icon="reset" (click)="pane.reset()">{{ lang.define.lib.reset }}</button>\r\n    <button kendoButton icon="search" [primary]="true" (click)="pane.search() ? visibleChange.emit(false): null">{{ lang.define.lib.filter }}</button>\r\n  </kendo-dialog-actions>\r\n</kendo-dialog>\r\n',styles:[""]}]}],Ye.ctorParameters=function(){return[{type:me},{type:t.NgZone}]},Ye.propDecorators={visible:[{type:t.Input}],visibleChange:[{type:t.Output}],title:[{type:t.Input}],width:[{type:t.Input}],height:[{type:t.Input}],form:[{type:t.Input}]};var Qe=function(){function e(e){this.lang=e,this.visibleChange=new t.EventEmitter,this.title="",this.width=null,this.dialogVisible=!1,this.height=null}return Object.defineProperty(e.prototype,"visible",{get:function(){return this.dialogVisible},set:function(e){e&&this.init(),this.dialogVisible=e},enumerable:!1,configurable:!0}),e.prototype.ngOnInit=function(){this.height=window.innerHeight-200-60,this.height<0&&(this.height=500)},e.prototype.close=function(){this.visibleChange.emit(!1),this.dialogVisible=!1},e.prototype.save=function(){var e=0;this.editFields.forEach((function(t){t.selectedEditable&&e++})),0!==e?(this.close(),this.form.startEditMulti()):alert("Please select at least one field for editing.")},e.prototype.load=function(){var e=this;this.editFields=[],this.form.define.fields.forEach((function(t){t.show&&t.editable&&(null!==t.selectedEditable&&void 0!==t.selectedEditable||(t.selectedEditable=!0),e.editFields.push(t))}))},e.prototype.init=function(){this.form&&this.form.define&&this.load()},e.prototype.selectAll=function(e){this.editFields.forEach((function(t){t.selectedEditable=e}))},e.prototype.onShowItemChange=function(e){var t=this;e=e.toLowerCase(),this.editFields=[],this.form.define.fields.forEach((function(n){n.show&&n.editable&&(""===e||-1!==n.caption.toLowerCase().indexOf(e)||n.groupName&&-1!==n.groupName.toLowerCase().indexOf(e))&&t.editFields.push(n)}))},e}();Qe.decorators=[{type:t.Component,args:[{selector:"gc-edit-column-select-pane",template:'<kendo-dialog *ngIf="dialogVisible" (close)="close()"\n              [title]="title">\n  <div style="height: 50px;overflow-y: hidden;overflow-x: hidden; width:800px;">\n    <kendo-textbox\n      style="width: 100%;"\n      placeholder="Filter"\n      [clearButton]="true"\n      (valueChange)="onShowItemChange($event)">\n      <ng-template kendoTextBoxSuffixTemplate>\n        <kendo-textbox-separator></kendo-textbox-separator>\n        <button kendoButton look="clear" [icon]="\'search\'"></button>\n      </ng-template>\n    </kendo-textbox>\n  </div>\n  <div [style.height]="(height-50) + \'px\'" style="overflow-y: auto;overflow-x: hidden; width:800px;">\n    <div class="row">\n      <ng-container *ngFor="let field of editFields">\n        <div class="col-4" style="padding-bottom: 4px;padding-top: 4px;" *ngIf="!field.hidden">\n          <input type="checkbox" kendoCheckBox\n                 [(ngModel)]="field.selectedEditable"/>&nbsp;\n          {{ field.groupName ? field.groupName + \' / \' : \'\' }}{{ field.caption }}\n        </div>\n      </ng-container>\n    </div>\n  </div>\n  <kendo-dialog-actions>\n    <button kendoButton (click)="selectAll(false)">{{lang.define.lib.deselectAll}}</button>\n    <button kendoButton (click)="selectAll(true)">{{lang.define.lib.selectAll}}</button>\n    <button kendoButton (click)="close()">{{lang.define.lib.close}}</button>\n    <button kendoButton [primary]="true" (click)="save()">{{lang.define.lib.edit}}</button>\n  </kendo-dialog-actions>\n</kendo-dialog>\n',styles:[""]}]}],Qe.ctorParameters=function(){return[{type:me}]},Qe.propDecorators={visible:[{type:t.Input}],visibleChange:[{type:t.Output}],title:[{type:t.Input}],width:[{type:t.Input}],form:[{type:t.Input}]};var et=function(t){function n(e,n,i,r,a,l,o,s){var d=t.call(this,e,n,i,a,l,r,o,s)||this;return d.lang=e,d.api=n,d.message=i,d.state=r,d.el=a,d.datePipe=l,d.cd=o,d.ngZone=s,d.expandField="name",d.initiallyExpanded=!1,d.idField="id",d.parentIdField="parent",d.columnExpandWidth=200,d.lockTreeColumn=!0,d.selectionCheckValue=!1,d.selectionCheckIndeterminate=!1,d.expandLevelListItems=[{text:"Collapse",value:0},{text:"Level 1",value:1},{text:"Level 2",value:2},{text:"Expand",value:-1}],d.expandLevel=0,d.isSelected=function(e){return!!e&&d.selectedKeys.includes(e.serial)},d.enableMasterDetail=!1,d}return oe(n,t),n.prototype.ngOnInit=function(){this.showFooterBar||null===this.bottomDistance||(this.bottomDistance=5),this.initFormHeight()||this.bottomDistance||(this.formHeight=null)},n.prototype.loadDefine=function(e,n){var i=this;void 0===e&&(e=null),void 0===n&&(n=null),t.prototype.loadDefine.call(this,(function(){e&&e()}),(function(){n&&n(),i.expandOnLoad()}))},n.prototype.load=function(e){var n=this;void 0===e&&(e=null),t.prototype.load.call(this,(function(){e&&e(),n.expandOnLoad()}))},n.prototype.expandOnLoad=function(){var e=this;this.initiallyExpanded?this.expandLevel=-1:0!==this.expandLevel&&this.ngZone.onStable.asObservable().pipe(d.take(1)).subscribe((function(){e.collapsedIds=[],e.expandToLevel(e.expandLevel),e.expandEvent()}))},n.prototype.save=function(e,n){var i=this;void 0===e&&(e=null),void 0===n&&(n=null),t.prototype.save.call(this,e,(function(e,t){i.data=ce(i.data),n&&n(e,t)}))},n.prototype.resize=function(){t.prototype.resize.call(this),this.expandEvent()},n.prototype.filterChange=function(e){},n.prototype.sortChange=function(e){},n.prototype.expandToLevel=function(e,t){var n=this;void 0===t&&(t=null);var i=[];this.data.forEach((function(e){t?t.forEach((function(t){e[n.parentIdField]===t&&(n.collapsedIds.push(e[n.idField]),i.push(e[n.idField]))})):null==e[n.parentIdField]&&(n.collapsedIds.push(e[n.idField]),i.push(e[n.idField]))})),e>1&&this.expandToLevel(e-1,i)},n.prototype.expandEvent=function(){var e=this;this.ngZone.onStable.asObservable().pipe(d.take(1)).subscribe((function(){e.columnExpand!==e.tree.columns.first?e.tree.autoFitColumn(e.tree.columns.first):e.tree.autoFitColumn(e.tree.columns.last),e.fitSystemColumns()}))},n.prototype.startEdit=function(e,n){null!=e&&this.setSelected(e),t.prototype.startEdit.call(this,e,n)},n.prototype.startEditMultiWithEvent=function(e){t.prototype.startEditMultiWithEvent.call(this,e),this.expandEvent()},n.prototype.delete=function(e){void 0===e&&(e=null),null!=e&&this.setSelected(e),t.prototype.delete.call(this,e)},n.prototype.cellClickHandler=function(e){var n=e.column,i=e.dataItem,r=e.originalEvent;t.prototype.cellClickHandler.call(this,{column:n,dataItem:i,originalEvent:r})},n.prototype.fitSystemColumns=function(){var e=this;this.isVisible()&&this.grid&&this.grid.columns&&this.ngZone.onStable.asObservable().pipe(d.take(1)).subscribe((function(){e.columnSelection&&e.tree.autoFitColumn(e.columnSelectionTree),e.columnSystem&&e.tree.autoFitColumn(e.columnSystemTree),e.columnExpand&&(e.columnExpandWidth&&200!==e.columnExpandWidth?e.columnExpand.width=e.columnExpandWidth:e.autoSize&&e.tree.autoFitColumn(e.columnExpand)),e.columnInlinesTree&&e.columnInlinesTree.forEach((function(t){e.tree.autoFitColumn(t)})),e.rightColumnInlinesTree&&e.rightColumnInlinesTree.forEach((function(t){e.tree.autoFitColumn(t)}))}))},n.prototype.setSelected=function(e){this.selectedKeys=[e],this.updateSelectionCheck(),this.tree.updateView()},n.prototype.updateSelectionCheck=function(){0===this.selectedKeys.length?(this.selectionCheckValue=!1,this.selectionCheckIndeterminate=!1):this.selectedKeys.length<this.data.length?(this.selectionCheckValue=!1,this.selectionCheckIndeterminate=!0):(this.selectionCheckValue=!0,this.selectionCheckIndeterminate=!1)},n.prototype.selectionClick=function(t){if(this.status!==e.FormStatus.View&&this.cancel(),this.selectedKeys.includes(t)){var n=this.selectedKeys.indexOf(t,0);n>-1&&this.selectedKeys.splice(n,1)}else this.selectedKeys.push(t);this.updateSelectionCheck(),this.tree.updateView()},n.prototype.collapse=function(){0===this.expandLevel?(this.initiallyExpanded=!1,this.collapsedIds=[]):-1===this.expandLevel?(this.initiallyExpanded=!0,this.collapsedIds=[]):(this.initiallyExpanded=!1,this.collapsedIds=[],this.expandToLevel(this.expandLevel)),this.expandEvent()},n.prototype.selectionCheckClick=function(){var t=this,n=!this.selectionCheckValue;this.selectionCheckIndeterminate=!1,this.selectedKeys=[],n&&this.data.forEach((function(e){t.isSelectable&&!t.isSelectable(e)||t.selectedKeys.push(e.serial)})),this.status!==e.FormStatus.View&&this.cancel(),this.tree.updateView(),this.expandEvent()},n.prototype.afterListed=function(e){e.completed&&this.expandEvent()},n.prototype.startInsert=function(e){void 0===e&&(e=null),t.prototype.startInsert.call(this,e),this.directive.rebind()},n.prototype.startCopy=function(e){t.prototype.startCopy.call(this,e),this.directive.rebind()},n.prototype.startCopyMulti=function(){t.prototype.startCopyMulti.call(this),this.directive.rebind()},n.prototype.addNewRow=function(e,n){return void 0===e&&(e=null),void 0===n&&(n=!1),e||(e={}),e[this.idField]||(e[this.idField]=-1),t.prototype.addNewRow.call(this,e,n)},n}(Ae);et.decorators=[{type:t.Component,args:[{selector:"gc-tree-grid-form",template:'<div *ngIf="buttonOnTop && define" style="margin-bottom: 4px;">\r\n  \x3c!-- Search button --\x3e\r\n  <button *ngIf="searchFields && searchFields.length > 0" kendoButton icon="search"\r\n          title="{{ lang.define.lib.searchPaneTitle }}"\r\n          [primary]="searchBySearchPane || buttonPrimary"\r\n          style="margin-right: 4px;"\r\n          (click)="visibleSearchPane = true">{{ showButtonText ? lang.define.lib.search : \'\' }}</button>\r\n\r\n\r\n  \x3c!--Import button--\x3e\r\n  <ng-template [ngIf]="showButtons">\r\n    <ng-container *ngTemplateOutlet="systemButtons"></ng-container>\r\n  </ng-template>\r\n\r\n  <ng-container *ngTemplateOutlet="userButtons"></ng-container>\r\n</div>\r\n\x3c!--suppress TypeScriptValidateTypes --\x3e\r\n<kendo-treelist #directive="kendoTreeListFlatBinding"\r\n                [kendoTreeListFlatBinding]="data"\r\n                kendoTreeListExpandable\r\n                [idField]="idField"\r\n                [parentIdField]="parentIdField"\r\n                [filterable]="headerFilterable? \'menu\': false"\r\n                [columnMenu]="false"\r\n                [sortable]="true"\r\n                [reorderable]="true"\r\n                [resizable]="true"\r\n                [height]="formHeight"\r\n                [sort]="sortDescriptor"\r\n                [filter]="filterDescriptor"\r\n                (sortChange)="sortChange($event)"\r\n                (columnVisibilityChange)="columnVisibilityChange($event)"\r\n                (columnResize)="columnResize($event)"\r\n                (columnReorder)="columnReorder($event)"\r\n                (filterChange)="filterChange($event)"\r\n                (expand)="expandEvent()"\r\n                (collapse)="expandEvent()"\r\n                [navigatable]="true"\r\n                (cellClick)="cellClickHandler($event)"\r\n                (dblclick)="dblClickEvent()"\r\n                [isSelected]="isSelected"\r\n                [(expandedKeys)]="collapsedIds"\r\n                [initiallyExpanded]="initiallyExpanded"\r\n                (keydown)="onKeydown($event)"\r\n                [rowClass]="rowCallback"\r\n                #grid\r\n>\r\n\x3c!--  (expandedKeysChange)="onExpandedIdsChange($event)"--\x3e\r\n\x3c!--  [isSelected]="isSelected"--\x3e\r\n\x3c!--  kendoTreeListSelectable--\x3e\r\n\x3c!--  itemKey="serial"--\x3e\r\n\x3c!--  [selectable]=" {--\x3e\r\n\x3c!--  mode: \'row\',--\x3e\r\n\x3c!--  drag: false,--\x3e\r\n\x3c!--  multiple: true,--\x3e\r\n\x3c!--  enabled: true}"--\x3e\r\n\x3c!--  [(selectedItems)]="treeGridSelectedKeys"--\x3e\r\n\x3c!--  (selectedItemsChange)="selectionChange();"--\x3e\r\n\x3c!--  --\x3e\r\n  <kendo-treelist-messages\r\n    groupPanelEmpty="{{ lang.define.lib.groupPanelEmpty }}"\r\n    noRecords="{{ lang.define.lib.noRecords }}"\r\n    pagerFirstPage="{{ lang.define.lib.pagerFirstPage }}"\r\n    pagerLastPage="{{ lang.define.lib.pagerLastPage }}"\r\n    pagerPreviousPage="{{ lang.define.lib.pagerPreviousPage }}"\r\n    pagerNextPage="{{ lang.define.lib.pagerNextPage }}"\r\n    pagerPage="{{ lang.define.lib.pagerPage }}"\r\n    pagerItemsPerPage="{{ lang.define.lib.pagerItemsPerPage }}"\r\n    pagerOf="{{ lang.define.lib.pagerOf }}"\r\n    pagerPageNumberInputTitle="{{ lang.define.lib.pagerPageNumberInputTitle }}"\r\n    filter="{{ lang.define.lib.filter }}"\r\n    filterFilterButton="{{ lang.define.lib.filterFilterButton }}"\r\n    filterClearButton="{{ lang.define.lib.filterClearButton }}"\r\n    loading="{{ lang.define.lib.loading }}"\r\n    columnMenu="{{ lang.define.lib.columnMenu }}"\r\n    columns="{{ lang.define.lib.columns }}"\r\n    lock="{{ lang.define.lib.lock }}"\r\n    unlock="{{ lang.define.lib.unlock }}"\r\n    sortable="{{ lang.define.lib.sortable }}"\r\n    sortAscending="{{ lang.define.lib.sortAscending }}"\r\n    sortDescending="{{ lang.define.lib.sortDescending }}"\r\n    sortedAscending="{{ lang.define.lib.sortedAscending }}"\r\n    sortedDescending="{{ lang.define.lib.sortedDescending }}"\r\n    sortedDefault="{{ lang.define.lib.sortedDefault }}"\r\n    columnsApply="{{ lang.define.lib.columnsApply }}"\r\n    columnsReset="{{ lang.define.lib.columnsReset }}"\r\n  >\r\n\r\n  </kendo-treelist-messages>\r\n  <ng-template [ngIf]="define">\r\n    \x3c!--selection--\x3e\r\n    <kendo-treelist-column\r\n      [headerClass]="\'kendo-grid-checkbox-column-header\'"\r\n      [columnMenu]="false" [width]="30"\r\n      [locked]="true"\r\n      [style]="{textAlign: \'center\'}"\r\n      *ngIf="selection" #columnSelection>\r\n      <ng-template kendoTreeListHeaderTemplate>\r\n        <input type="checkbox" kendoCheckBox\r\n               [indeterminate]="selectionCheckIndeterminate"\r\n               [(ngModel)]="selectionCheckValue"\r\n               (click)="selectionCheckClick()"/>&nbsp;\r\n      </ng-template>\r\n\r\n      <ng-template kendoTreeListCellTemplate let-record="dataItem">\r\n        <ng-template [ngIf]="!isSelectable">\r\n          <input type="checkbox" kendoCheckBox\r\n                 [checked]="selectedKeys.includes(record.serial)"\r\n                 (click)="selectionClick(record.serial)"\r\n          >\r\n        </ng-template>\r\n        <ng-template [ngIf]="isSelectable && data && data.length > 0">\r\n          <input type="checkbox" kendoCheckBox\r\n                 [hidden]="!isSelectable(record)"\r\n                 [checked]="selectedKeys.includes(record.serial)"\r\n                 (click)="selectionClick(record.serial)"\r\n          >\r\n        </ng-template>\r\n      </ng-template>\r\n\r\n\r\n    </kendo-treelist-column>\r\n\r\n    \x3c!--system button--\x3e\r\n    <ng-template [ngIf]="\r\n    define && rowButtonVisible\r\n    && (\r\n      (define.optionInsert || define.optionUpdate || define.optionDelete || view)\r\n      ||\r\n      (inlineItem && inlineItem.items)\r\n      )">\r\n      <kendo-treelist-column\r\n        [style]="{paddingLeft: \'2px\', paddingRight: \'2px\'}"\r\n        [locked]="true"\r\n        [width]="100"\r\n        [columnMenu]="false" #columnSystem>\r\n        <ng-template kendoTreeListCellTemplate let-record="dataItem">\r\n          <gc-row-button-pane [grid]="this" [record]="record"></gc-row-button-pane>\r\n        </ng-template>\r\n      </kendo-treelist-column>\r\n\r\n    </ng-template>\r\n\r\n\r\n    \x3c!--tree column--\x3e\r\n    <kendo-treelist-column\r\n      [locked]="lockTreeColumn"\r\n      [expandable]="true"\r\n      [width]="columnExpandWidth"\r\n      [columnMenu]="false" #columnExpand\r\n    >\r\n      <ng-template kendoTreeListHeaderTemplate>\r\n        <div style="text-align: left;">\r\n          <kendo-dropdownlist [(value)]="expandLevel" [data]="expandLevelListItems"\r\n                              [valuePrimitive]="true" textField="text" valueField="value"\r\n                              (valueChange)="collapse()"\r\n          ></kendo-dropdownlist>\r\n        </div>\r\n      </ng-template>\r\n      <ng-template kendoTreeListCellTemplate let-record="dataItem">\r\n        <b>{{ record[expandField] }}</b>\r\n      </ng-template>\r\n    </kendo-treelist-column>\r\n\r\n    \x3c!--user button--\x3e\r\n    <ng-container *ngFor="let item of inlineItems">\r\n      <ng-template [ngIf]="item.position == \'left\'">\r\n        <kendo-treelist-column\r\n          [style]="{paddingLeft: \'2px\', paddingRight: \'2px\'}"\r\n          [locked]="true" [title]="" [width]="item.items.length * 50 + 20" #columnInlines>\r\n          <ng-template kendoTreeListCellTemplate let-record="dataItem">\r\n            <div style="white-space: nowrap" >\r\n              <ng-container *ngFor="let button of item.items">\r\n                <ng-template [ngIf]="!button.visible || button.visible(record)">\r\n                  <ng-container [ngSwitch]="button.type">\r\n                    <button *ngSwitchCase="\'button\'" kendoButton\r\n                            (click)="button.action(record)"\r\n                            [primary]="true" [icon]="button.buttonIcon"\r\n                            [title]="button.buttonTitle"\r\n                            style="margin-right: 4px;"\r\n                    >{{ button.buttonCaption }}</button>\r\n                    <kendo-switch\r\n                      *ngSwitchCase="\'switch\'"\r\n                      style="margin-right: 4px;"\r\n                      [(ngModel)]="record[button.name]"\r\n                      (valueChange)="button.action(record)"></kendo-switch>\r\n                  </ng-container>\r\n                </ng-template>\r\n              </ng-container>\r\n            </div>\r\n          </ng-template>\r\n        </kendo-treelist-column>\r\n      </ng-template>\r\n    </ng-container>\r\n\x3c!--    [width]="field.width ? field.width : (field.type === FieldTypeEnum.Text? 300 : (field.defaultWidth? field.defaultWidth: defaultColumnWidth))"--\x3e\r\n    \x3c!--columns--\x3e\r\n    <ng-container *ngFor="let field of define.fields">\r\n      <ng-template [ngIf]="!field.hidden">\r\n        <kendo-treelist-column\r\n          [field]="field.name"\r\n          [title]="field.caption"\r\n\r\n          [expandable]="false"\r\n          [width]="field.width ? field.width : (field.type === FieldTypeEnum.Text? 300 : (field.defaultWidth? field.defaultWidth: defaultColumnWidth))"\r\n                               [minResizableWidth]="50"\r\n                               [hidden]="!field.show"\r\n                               [sortable]="true" [filterable]="field.searchable"\r\n          [class]="cellClass(field.name)"\r\n        >\r\n          <ng-template kendoTreeListHeaderTemplate>\r\n            <span *ngIf="field.required" style="color: red">*{{ field.requiredGroup }}&nbsp;</span>{{ field.caption }}\r\n          </ng-template>\r\n\r\n          <ng-template kendoTreeListCellTemplate let-dataItem let-rowIndex="rowIndex">\r\n            <ng-template [ngIf]="!uf(field.name) || (fieldEditable(dataItem.serial, field)\r\n            && uf(field.name).mode==\'view\')||\r\n            (!fieldEditable(dataItem.serial, field) && uf(field.name).mode==\'edit\')"\r\n                         [ngIfElse]="custom">\r\n\r\n              <gc-field\r\n                [baseForm]="this"\r\n                [alignByDataType]="alignByDataType"\r\n                [apiUrl]="apiUrl"\r\n                [link]="links?links[field.name]:null"\r\n                [form]="define"\r\n                [define]="field"\r\n                [record]="dataItem"\r\n                [(value)]="dataItem[field.name]"\r\n                [editable]="fieldEditable(dataItem.serial, field)"\r\n                (changed)="onFieldValueChange($event, dataItem.serial, field.name)"\r\n                (detailMultiSelect)="openMultiSelectDetail($event)"\r\n              ></gc-field>\r\n            </ng-template>\r\n            <ng-template #custom>\r\n              <ng-template [ngTemplateOutlet]="uf(field.name).template"\r\n                           [ngTemplateOutletContext]="{$implicit: dataItem,\r\n                           editable: fieldEditable(dataItem.serial, field), field: field, index: rowIndex}"></ng-template>\r\n            </ng-template>\r\n          </ng-template>\r\n\r\n\x3c!--          <ng-template kendoTreeListFilterMenuTemplate let-filter let-column="column"  let-filterService="filterService">--\x3e\r\n\x3c!--            &lt;!&ndash; suppress AngularInvalidExpressionResultType &ndash;&gt;--\x3e\r\n\x3c!--                            <div [ngStyle]="{width: field.width && field.width >= 200 ? field.width + \'px\' : null }">--\x3e\r\n\r\n\x3c!--                            </div>--\x3e\r\n\x3c!--&lt;!&ndash;            <gc-filter-pane [field]="field"&ndash;&gt;--\x3e\r\n\x3c!--&lt;!&ndash;                            [filterService]="filterService" [filter]="filter" [column]="column" [form]="this">&ndash;&gt;--\x3e\r\n\r\n\x3c!--&lt;!&ndash;            </gc-filter-pane>&ndash;&gt;--\x3e\r\n\x3c!--          </ng-template>--\x3e\r\n\r\n          <ng-template [ngIf]="field.listName">\r\n            <ng-template kendoTreeListFilterMenuTemplate let-filter>\r\n              <gc-tree-grid-dropdown-filter\r\n                [filter]="filter"\r\n                [data]="define.optionsMap[field.listName + (field.tree ? \'_tree\' : \'\')]"\r\n                [field]="field.name"\r\n                textField="text"\r\n                valueField="value">\r\n              </gc-tree-grid-dropdown-filter>\r\n            </ng-template>\r\n          </ng-template>\r\n\r\n          <ng-template [ngIf]="field.listKendoValues">\r\n            <ng-template kendoTreeListFilterMenuTemplate let-filter>\r\n              <gc-tree-grid-dropdown-filter\r\n                [filter]="filter"\r\n                [data]="field.listKendoValues"\r\n                [field]="field.name"\r\n                textField="text"\r\n                valueField="value">\r\n              </gc-tree-grid-dropdown-filter>\r\n            </ng-template>\r\n          </ng-template>\r\n\r\n        </kendo-treelist-column>\r\n      </ng-template>\r\n    </ng-container>\r\n\r\n    \x3c!--user button--\x3e\r\n    <ng-container *ngFor="let item of inlineItems">\r\n      <ng-template [ngIf]="item.position == \'right\'">\r\n        <kendo-treelist-column [title]=""\r\n                               [style]="{paddingLeft: \'2px\', paddingRight: \'2px\'}"\r\n                               [width]="item.items.length * 50 + 20" #rightColumnInlines>\r\n          <ng-template kendoTreeListCellTemplate let-record="dataItem">\r\n            <div style="white-space: nowrap" >\r\n              <ng-container *ngFor="let button of item.items">\r\n                <ng-template [ngIf]="!button.visible || button.visible(record)">\r\n                  <ng-container [ngSwitch]="button.type">\r\n                    <button *ngSwitchCase="\'button\'" kendoButton\r\n                            (click)="button.action(record)"\r\n                            [primary]="true" [icon]="button.buttonIcon"\r\n                            [title]="button.buttonTitle"\r\n                            style="margin-right: 4px;"\r\n                    >{{ button.buttonCaption }}</button>\r\n                    <kendo-switch\r\n                      *ngSwitchCase="\'switch\'"\r\n                      style="margin-right: 4px;"\r\n                      [(ngModel)]="record[button.name]"\r\n                      (valueChange)="button.action(record)"></kendo-switch>\r\n                  </ng-container>\r\n                </ng-template>\r\n              </ng-container>\r\n            </div>\r\n          </ng-template>\r\n        </kendo-treelist-column>\r\n      </ng-template>\r\n    </ng-container>\r\n  </ng-template>\r\n</kendo-treelist>\r\n\r\n\x3c!--Pager--\x3e\r\n<ng-container *ngIf="define && showFooterBar">\r\n  <kendo-datapager style="width: 100%;"\r\n                   [pageSize]="define.pageSize > 0 ? define.pageSize: data.length" [skip]="define.pageSize > 0 ? define.pageSize*(define.pageIndex-1) : 0"\r\n                   [total]="define.total" (pageChange)="onPageChange($event)">\r\n    <kendo-datapager-messages\r\n      firstPage="{{ lang.define.lib.pagerFirstPage }}"\r\n      lastPage="{{ lang.define.lib.pagerLastPage }}"\r\n      previousPage="{{ lang.define.lib.pagerPreviousPage }}"\r\n      nextPage="{{ lang.define.lib.pagerNextPage }}"\r\n      page="{{ lang.define.lib.pagerPage }}"\r\n      pageNumberInputTitle="{{ lang.define.lib.pagerPageNumberInputTitle }}"\r\n      itemsPerPage="{{ lang.define.lib.pagerItemsPerPage }}"\r\n      of="{{ lang.define.lib.pagerOf }}"\r\n      items="{{ lang.define.lib.pagerItems }}"\r\n    ></kendo-datapager-messages>\r\n    <ng-template kendoDataPagerTemplate>\r\n\r\n      \x3c!--Back button--\x3e\r\n      <ng-template [ngIf]="showBackButton">\r\n        <gc-back-button></gc-back-button>\r\n      </ng-template>\r\n\r\n      \x3c!-- System button --\x3e\r\n      \x3c!--let-totalPages="totalPages" let-currentPage="currentPage"--\x3e\r\n      <kendo-dropdownbutton [data]="settingCommands"\r\n                            (open)="loadSettingCommands()"\r\n                            icon="more-horizontal" (itemClick)="settingCommandClick($event)"\r\n                            *ngIf="showButtons"\r\n                            title="More commands"\r\n      >\r\n        <ng-template kendoDropDownButtonItemTemplate let-dataItem>\r\n          <ng-container *ngIf="dataItem[\'setting\']; else elseBlock">\r\n            <span class="k-icon k-i-{{ dataItem.icon }}"></span>\r\n            <span style="color: blue;">{{ dataItem.text }}</span>\r\n          </ng-container>\r\n          <ng-template #elseBlock>\r\n            <span class="k-icon k-i-{{ dataItem.icon }}"></span>\r\n            <span>{{ dataItem.text }}</span>\r\n          </ng-template>\r\n        </ng-template>\r\n      </kendo-dropdownbutton>&nbsp;\r\n\r\n      \x3c!-- Column button --\x3e\r\n      <button kendoButton icon="columns"\r\n              title="Show/hide columns"\r\n              [primary]="visibleColumnPanel"\r\n              style="margin-right: 4px;"\r\n              (click)="visibleColumnPanel = !visibleColumnPanel"\r\n              ></button>\r\n      \x3c!-- Search button --\x3e\r\n      <button\r\n        *ngIf="!buttonOnTop && searchFields && searchFields.length > 0"\r\n        kendoButton icon="search"\r\n              title="{{ lang.define.lib.searchPaneTitle }}"\r\n              [primary]="buttonPrimary || searchBySearchPane"\r\n              style="margin-right: 4px;"\r\n              (click)="visibleSearchPane = true">{{ showButtonText ? lang.define.lib.search : \'\' }}</button>\r\n\r\n      \x3c!--Import button--\x3e\r\n      <ng-template [ngIf]="!buttonOnTop && showButtons">\r\n        <ng-container *ngTemplateOutlet="systemButtons"></ng-container>\r\n      </ng-template>\r\n\r\n      \x3c!---User button--\x3e\r\n      <ng-template [ngIf]="!buttonOnTop && userButtonDirectives && userButtonDirectives.length >0">\r\n        <div class="split">&nbsp;</div>\r\n        <ng-container *ngTemplateOutlet="userButtons"></ng-container>\r\n      </ng-template>\r\n      <div class="split">&nbsp;</div>\r\n      <kendo-datapager-page-sizes [pageSizes]="pageSizes" style="margin-left: 0"\r\n                                  *ngIf="dataPagerVisible  && ((define.total > data.length) || (data.length > pageSizesThreshold))  && define.pageSize > 0"></kendo-datapager-page-sizes>\r\n\r\n      <ng-template [ngIf]="dataPagerVisible && (define.total > data.length)">\r\n        <kendo-datapager-prev-buttons style="margin-right: 10px;"></kendo-datapager-prev-buttons>\r\n        <kendo-datapager-input></kendo-datapager-input>\r\n        <kendo-datapager-next-buttons></kendo-datapager-next-buttons>\r\n      </ng-template>\r\n      <kendo-datapager-info></kendo-datapager-info>\r\n    </ng-template>\r\n  </kendo-datapager>\r\n</ng-container>\r\n\r\n\x3c!-- Button --\x3e\r\n<ng-template #userButtons>\r\n  <ng-container *ngFor="let marker of userButtonDirectives">\r\n    <ng-template [ngTemplateOutlet]="marker.template"></ng-template>\r\n  </ng-container>\r\n</ng-template>\r\n\r\n\x3c!-- System button --\x3e\r\n<ng-template #systemButtons>\r\n  <button kendoButton icon="plus" [primary]="buttonPrimary"\r\n          (click)="startInsert($event)"\r\n          title="{{ lang.define.lib.add }} c"\r\n          style="margin-right: 4px;" [hidden]="status!=FormStatusEnum.View || !define.optionInsert">\r\n    {{ showButtonText ? lang.define.lib.add : \'\' }}\r\n  </button>\r\n  <button kendoButton icon="edit" [primary]="buttonPrimary"\r\n          *ngIf="this.define.optionUpdate && this.checkSelected() && this.status === FormStatusEnum.View"\r\n          (click)="startEditMultiWithEvent($event)"\r\n          title="{{ lang.define.lib.edit}}"\r\n          style="margin-right: 4px;"\r\n          [hidden]="status!=FormStatusEnum.View || !define.optionUpdate || !editCache  || !editCache[1]">\r\n    {{ showButtonText ? lang.define.lib.edit : \'\' }}\r\n  </button>\r\n  <button kendoButton icon="close"\r\n          (click)="cancel()" style="margin-right: 4px;"\r\n          title="{{ lang.define.lib.cancel}}"\r\n          *ngIf="(this.define.optionInsert || this.define.optionUpdate) && (this.status === FormStatusEnum.Edit || this.status === FormStatusEnum.Insert || this.status === FormStatusEnum.Copy)">\r\n    {{ showButtonText ? lang.define.lib.cancel : \'\' }}\r\n  </button>\r\n  <button\r\n    kendoButton icon="save" [primary]="true"\r\n    title="{{ lang.define.lib.save }}"\r\n    (click)="save()"\r\n    style="margin-right: 4px;"\r\n    *ngIf="(this.define.optionInsert || this.define.optionUpdate) && (this.status === FormStatusEnum.Edit || this.status === FormStatusEnum.Insert || this.status === FormStatusEnum.Copy)"\r\n  >{{ showButtonText ? lang.define.lib.save : \'\' }}</button>\r\n  <button kendoButton icon="copy" [primary]="buttonPrimary"\r\n          (click)="startCopyMulti()"\r\n          title="{{ lang.define.lib.copy }}"\r\n          style="margin-right: 4px;"\r\n          *ngIf="define.optionInsert && define.optionCopy && this.checkSelected() && this.status === FormStatusEnum.View"\r\n  >\r\n    {{ showButtonText ? lang.define.lib.copy : \'\' }}\r\n  </button>\r\n  <button kendoButton icon="trash" [primary]="true"\r\n          style="margin-right: 4px;"\r\n          (click)="delete()"\r\n          title="{{ lang.define.lib.delete }}"\r\n          *ngIf="this.define.optionDelete && this.checkSelected() && this.status === FormStatusEnum.View"\r\n  >\r\n    {{ showButtonText ? lang.define.lib.delete : \'\' }}\r\n  </button>\r\n  <button kendoButton icon="excel" [primary]="buttonPrimary"\r\n          style="margin-right: 4px;"\r\n          (click)="excel()"\r\n          title="{{ lang.define.lib.excel }}"\r\n          *ngIf="this.define.optionExcel && this.status === FormStatusEnum.View"\r\n  >{{ showButtonText ? lang.define.lib.excel : \'\' }}</button>\r\n  <gc-import-button style="margin-right: 4px;" title="Import excel"\r\n                    *ngIf="define.optionImport"\r\n                    [primary]="buttonPrimary"\r\n                    [apiUrl]="apiUrl"\r\n                    [define]="define"\r\n                    (imported)="onImported()"\r\n                    [note]="importNote"\r\n                    [deleteOption]="importDeleteOption"\r\n                    [caption]="showButtonText ? lang.define.lib.import : \'\' "\r\n  ></gc-import-button>\r\n</ng-template>\r\n\r\n\x3c!-- Column --\x3e\r\n<gc-column-pane\r\n  [(visible)]="visibleColumnPanel"\r\n  [width]="800"\r\n  [form]="this" [title]="lang.define.lib.columnSetting"\r\n  [columnSettingPhpCode]="columnSettingPhpCode"\r\n></gc-column-pane>\r\n\r\n\x3c!-- Detail pane --\x3e\r\n<gc-detail-modal [(visible)]="visibleDetailModal"\r\n                 [form]="this"\r\n                 [title]="detailModalTitle"\r\n                 [width]="detailDialogWidth"\r\n                 [iconName]="detailModalIcon"\r\n></gc-detail-modal>\r\n\r\n\x3c!-- Do not understand this is for what. But maybe need ... Ah, remember! for not hide multi select detail box when col lock  --\x3e\r\n\x3c!-- Just wait. Indeed no need  --\x3e\r\n\x3c!--<gc-multi-select-detail [parent]="multiSelectComponent"></gc-multi-select-detail>--\x3e\r\n\r\n\x3c!-- Search pane --\x3e\r\n<gc-search-pane-dialog [(visible)]="visibleSearchPane" [form]="this" [title]="searchPaneTitle" [width]="searchDialogWidth"></gc-search-pane-dialog>\r\n\r\n\x3c!-- Setting pane --\x3e\r\n<gc-setting-pane [form]="this"></gc-setting-pane>\r\n\r\n<gc-edit-column-select-pane [form]="this" [title]="selectEditColumnPaneTitle" [(visible)]="visibleEditColumnPane"></gc-edit-column-select-pane>\r\n\r\n<div *ngIf="dataLoading || loading" class="k-i-loading"></div>\r\n\r\n',styles:[".k-i-loading{position:fixed;top:0;left:0;right:0;bottom:0;font-size:64px;background-color:hsla(0,0%,100%,.1);color:#ff6757;z-index:99999}.treeListCellDiv{background-color:#00b0ff;height:100%}"]}]}],et.ctorParameters=function(){return[{type:me},{type:fe},{type:ye},{type:ge},{type:t.ElementRef},{type:a.DatePipe},{type:t.ChangeDetectorRef},{type:t.NgZone}]},et.propDecorators={expandField:[{type:t.Input}],initiallyExpanded:[{type:t.Input}],idField:[{type:t.Input}],parentIdField:[{type:t.Input}],columnExpandWidth:[{type:t.Input}],lockTreeColumn:[{type:t.Input}],tree:[{type:t.ViewChild,args:["grid"]}],columnExpand:[{type:t.ViewChild,args:["columnExpand"]}],columnSelectionTree:[{type:t.ViewChild,args:["columnSelection"]}],columnSystemTree:[{type:t.ViewChild,args:["columnSystem"]}],directive:[{type:t.ViewChild,args:["directive"]}],columnInlinesTree:[{type:t.ViewChildren,args:["columnInlines"]}],rightColumnInlinesTree:[{type:t.ViewChildren,args:["rightColumnInlines"]}],expandLevelListItems:[{type:t.Input}],expandLevel:[{type:t.Input}]};var tt=function(e){function t(t){return e.call(this,t)||this}return oe(t,e),Object.defineProperty(t.prototype,"selectedValue",{get:function(){var e=this.filterByField(this.field);return e?e.value:null},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"defaultItem",{get:function(){var e;return(e={})[this.textField]="Select item...",e[this.valueField]=null,e},enumerable:!1,configurable:!0}),t.prototype.onChange=function(e){this.applyFilter(null===e?this.removeFilter(this.field):this.updateFilter({field:this.field,operator:"eq",value:e}))},t}(v.BaseFilterCellComponent);tt.decorators=[{type:t.Component,args:[{selector:"gc-tree-grid-dropdown-filter",template:'<kendo-dropdownlist\n  [data]="data"\n  (valueChange)="onChange($event)"\n  [defaultItem]="defaultItem"\n  [value]="selectedValue"\n  [valuePrimitive]="true"\n  [textField]="textField"\n  [valueField]="valueField">\n</kendo-dropdownlist>\n',styles:[""]}]}],tt.ctorParameters=function(){return[{type:v.FilterService}]},tt.propDecorators={filter:[{type:t.Input}],data:[{type:t.Input}],textField:[{type:t.Input}],valueField:[{type:t.Input}],field:[{type:t.Input}]};var nt=function(){function e(e){this.el=e,this.onChangeCallback=null,this.time=!1,this.weekNumber=ue.datePickerWeekNumber,this.calendarType=ue.datePickerCalendarTypeClassic?"classic":"infinite",this.popupSettings=null,this.dateFormat=ue.dateFormat,this.dateTimeFormat=ue.dateTimeFormat,this.styleBorderBottom=null,this.valueChange=new t.EventEmitter}return Object.defineProperty(e.prototype,"format",{get:function(){return this.time?this.dateTimeFormat:this.dateFormat},set:function(e){this.time?this.dateTimeFormat=e:this.dateFormat=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"value",{get:function(){return this.fieldValue},set:function(e){this.fieldValue=e,this.valueChange.emit(this.fieldValue),this.onChangeCallback&&this.onChangeCallback(this.fieldValue)},enumerable:!1,configurable:!0}),e.prototype.ngOnInit=function(){},e.prototype.registerOnChange=function(e){this.onChangeCallback=e},e.prototype.registerOnTouched=function(e){},e.prototype.writeValue=function(e){e!==this.value&&(this.value=e)},e}();nt.decorators=[{type:t.Component,args:[{selector:"gc-date-picker",template:'<kendo-datepicker *ngIf="!time"\r\n  [weekNumber]="weekNumber"\r\n                  formatPlaceholder="formatPattern"\r\n                  placeholder=""\r\n                  [calendarType]="calendarType"\r\n                  [popupSettings]="popupSettings"\r\n                  [(ngModel)]="value" [format]="dateFormat"\r\n                  [style.borderBottom] ="styleBorderBottom"\r\n                  title="{{el.nativeElement.title}}"\r\n>\r\n  <ng-template kendoCalendarMonthCellTemplate let-date>\r\n    <span [style.color]="date.getDay()===0?\'red\' : (date.getDay()===6? \'blue\' : null)">{{ date.getDate() }}</span>\r\n  </ng-template>\r\n\r\n</kendo-datepicker>\r\n\r\n<kendo-datetimepicker *ngIf="time"\r\n                      formatPlaceholder="formatPattern"\r\n                      placeholder=""\r\n                      [weekNumber]="weekNumber"\r\n                      [calendarType]="calendarType"\r\n                      [popupSettings]="popupSettings"\r\n                      [(ngModel)]="value" [format]="dateTimeFormat"\r\n                      [style.borderBottom] ="styleBorderBottom"\r\n                      title="{{el.nativeElement.title}}"\r\n>\r\n  <ng-template kendoCalendarMonthCellTemplate let-date>\r\n    <span [style.color]="date.getDay()===0?\'red\' : (date.getDay()===6? \'blue\' : null)">{{ date.getDate() }}</span>\r\n  </ng-template>\r\n</kendo-datetimepicker>\r\n',providers:[{provide:b.NG_VALUE_ACCESSOR,useExisting:t.forwardRef((function(){return nt})),multi:!0}],styles:[""]}]}],nt.ctorParameters=function(){return[{type:t.ElementRef}]},nt.propDecorators={time:[{type:t.Input}],weekNumber:[{type:t.Input}],calendarType:[{type:t.Input}],popupSettings:[{type:t.Input}],dateFormat:[{type:t.Input}],dateTimeFormat:[{type:t.Input}],styleBorderBottom:[{type:t.Input}],format:[{type:t.Input}],value:[{type:t.Input}],valueChange:[{type:t.Output}]};var it=function(){function e(){this.border=2,this.rounded=2,this.colorValue="#F0F0F0",this.borderColor="lightgray",this.foreColor="#4F4F4F"}return Object.defineProperty(e.prototype,"color",{get:function(){return this.colorValue},set:function(e){e&&(this.colorValue=e,this.foreColor=this.invertColor(this.colorValue),this.borderColor=this.shadeColor(this.colorValue,-30))},enumerable:!1,configurable:!0}),e.prototype.ngOnInit=function(){},e.prototype.shadeColor=function(e,t){if("transparent"===e)return"transparent";var n=this.getRBG(e),i=n[0],r=n[1],a=n[2];return i=(i=i*(100+t)/100)<255?i:255,r=(r=r*(100+t)/100)<255?r:255,a=(a=a*(100+t)/100)<255?a:255,i=Math.round(i),r=Math.round(r),a=Math.round(a),"#"+(1===i.toString(16).length?"0"+i.toString(16):i.toString(16))+(1===r.toString(16).length?"0"+r.toString(16):r.toString(16))+(1===a.toString(16).length?"0"+a.toString(16):a.toString(16))},e.prototype.getRBG=function(e){if(0===(e=this.colourNameToHex(e)).indexOf("#")&&(e=e.slice(1)),3===e.length&&(e=e[0]+e[0]+e[1]+e[1]+e[2]+e[2]),6!==e.length)throw new Error("Invalid HEX color.");return[parseInt(e.slice(0,2),16),parseInt(e.slice(2,4),16),parseInt(e.slice(4,6),16)]},e.prototype.invertColor=function(e,t){if(void 0===t&&(t=!0),"transparent"===e)return"#4F4F4F";var n=this.getRBG(e),i=n[0],r=n[1],a=n[2];if(t)return.299*i+.587*r+.114*a>186?"#4F4F4F":"#FFFFFF";var l=(255-i).toString(16),o=(255-r).toString(16),s=(255-a).toString(16);return"#"+this.padZero(l)+this.padZero(o)+this.padZero(s)},e.prototype.padZero=function(e,t){return void 0===t&&(t=2),t=t||2,(new Array(t).join("0")+e).slice(-t)},e.prototype.colourNameToHex=function(e){var t={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4","indianred ":"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgrey:"#d3d3d3",lightgreen:"#90ee90",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370d8",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#d87093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};return t[e.toLowerCase()]?t[e.toLowerCase()]:e.toLowerCase()},e}();it.decorators=[{type:t.Component,args:[{selector:"gc-chip",template:'<span class="gc-chip"\r\n      [style.border-color]="borderColor"\r\n      [style.border-width]="border + \'px\'"\r\n      [style.border-radius]="rounded + \'px\'"\r\n      [style.background-color]="colorValue"\r\n      [style.color]="foreColor"\r\n>\r\n  <ng-content></ng-content>\r\n</span>\r\n',styles:[".gc-chip{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:4px;flex:1 1 auto;height:24px;position:relative;box-sizing:border-box;border-style:solid;display:inline-flex;align-items:center;justify-content:center;font-size:14px;cursor:pointer;-moz-user-select:none;user-select:none;margin-right:2px;margin-top:1px;margin-bottom:1px}"]}]}],it.ctorParameters=function(){return[]},it.propDecorators={border:[{type:t.Input}],rounded:[{type:t.Input}],borderColor:[{type:t.Input}],foreColor:[{type:t.Input}],color:[{type:t.Input}]};var rt=function(){function e(){}return e.prototype.transform=function(e,t){return void 0===t&&(t=null),pe.numberFormat(e,t)},e}();rt.decorators=[{type:t.Pipe,args:[{name:"numberFormat"}]}];var at=function(){};at.decorators=[{type:t.NgModule,args:[{declarations:[Fe,ke,Ce,Pe,Ae,Be,De,rt,Ie,Le,Re,We,$e,Ne,Ve,Se,et,tt,Oe,Me,qe,ze,_e,He,Je,Ee,Te,Ze,Xe,Ye,Qe,we,nt,it],imports:[a.CommonModule,b.FormsModule,n.RouterModule,b.ReactiveFormsModule,x.LayoutModule,k.ButtonsModule,I.DatePickerModule,I.DateTimePickerModule,S.NumericTextBoxModule,S.CheckBoxModule,C.DropDownListModule,C.MultiSelectModule,C.ComboBoxModule,S.TextBoxModule,C.AutoCompleteModule,u.DialogModule,g.GridModule,w.PagerModule,S.SliderModule,F.IconModule,F.SVGIconModule,E.ContextMenuModule,S.SwitchModule,T.PopupModule,v.TreeListModule,D.TreeViewModule,I.DateInputModule,M.TooltipModule,S.FormFieldModule,P.LabelModule,I.TimePickerModule,S.RadioButtonModule,S.CheckBoxModule,S.CheckBoxModule,C.DropDownTreesModule],exports:[Fe,ke,Ie,Ce,we,Ae,Be,Le,De,Ne,Ve,Se,rt,et,Oe,Re,$e,We,Me,qe,ze,_e,He,Je,Ee,Te,Ze,Xe,Ye,Qe,nt,it]}]}],e.AlertService=ae,e.AllSelectComponent=we,e.ApiService=fe,e.AuthGuard=ve,e.AuthService=he,e.BackButtonComponent=Ce,e.BaseFormComponent=Pe,e.BaseListFieldComponent=Te,e.ChipComponent=it,e.ColumnPaneComponent=He,e.Config=ue,e.DatePickerComponent=nt,e.DetailModalComponent=Re,e.EditColumnSelectPaneComponent=Qe,e.ErrorInterceptor=be,e.FieldComponent=Fe,e.FieldGridFormComponent=Ve,e.FieldSingleFormComponent=Ne,e.FilterItemConditionComponent=ze,e.FilterItemValueComponent=_e,e.FilterPaneComponent=We,e.FormModule=at,e.GridFormComponent=Ae,e.ImportButtonComponent=Le,e.InlineItemComponent=Ze,e.JwtInterceptor=xe,e.LanguagesService=me,e.Locale=A,e.LongComboboxComponent=Ee,e.MasterDetailPaneComponent=Je,e.MessageService=ye,e.MultiSelectComponent=De,e.MultiSelectDetailComponent=Me,e.NumberFormatPipe=rt,e.RowButtonPaneComponent=$e,e.SearchPaneComponent=qe,e.SearchPaneDialogComponent=Ye,e.SettingPaneComponent=Xe,e.SingleFormComponent=Be,e.StateService=ge,e.TreeDropdownComponent=Oe,e.TreeGridDropdownFilterComponent=tt,e.TreeGridFormComponent=et,e.UserButtonDirective=ke,e.UserFieldDirective=Ie,e.UserGridEditFormDirective=Se,e.Util=pe,e.actionBulkCopy=U,e.actionBulkUpdate=q,e.actionCopy=K,e.actionData=$,e.actionDefine=z,e.actionDefineWithData=_,e.actionDelete=R,e.actionDownload=Z,e.actionExcel=J,e.actionExport="export",e.actionImport=X,e.actionInsert=j,e.actionParamName=Q,e.actionResetSetting=H,e.actionSample=Y,e.actionSetting=G,e.actionUpdate=W,e.downloadFieldParamName=te,e.downloadIdParamName=ne,e.downloadThumbnailParamName=ie,e.requestParamNameSuffix=re,e.serialParamName=ee,e.ɵ0=Ke,e.ɵ1=Ge,Object.defineProperty(e,"__esModule",{value:!0})}));
//# sourceMappingURL=gacoi-lib.umd.min.js.map