iszolea-ui 1.2.32 → 1.2.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/js/index.js
CHANGED
|
@@ -44,12 +44,12 @@ to disable the global search function and allow filtering by column only.`).dxPo
|
|
|
44
44
|
${this.isDataReadonly?'<i title="The source data is read only, editing is not available" class="fa-solid fa-circle-info"></i>':""}
|
|
45
45
|
</div>
|
|
46
46
|
</div>
|
|
47
|
-
`);s.push({location:"before",template:()=>_})}},onEditorPreparing:n=>{n.parentType==="dataRow"&&(n.dataField==="Name"||n.dataField==="Type")&&(n.editorOptions.disabled=!n.row.isNewRow)},onInitNewRow:n=>{n.data={IsKeyColumn:!1,IsDefaultViewField:!0}}},i={summaryColumn:"Name"};return this.isStandalonePage?t=$e(this.$container,r,i,this.pageTitle,"",!0):t=G(this.$container,{options:r,summaryColumn:i.summaryColumn,title:this.pageTitle,isFullScreen:!1}),t}prepareMainGridColumns(t){return t.forEach(r=>{(r.allowHiding===void 0||r.allowHiding===null)&&(r.allowHiding=!1),(r.showInColumnChooser===void 0||r.showInColumnChooser===null)&&(r.showInColumnChooser=!1)}),t}createMainGridDataSource(){return{store:Q({loadUrl:this.loadDataUrl,updateUrl:this.updateDataUrl,insertUrl:this.addDataUrl,deleteUrl:this.deleteDataUrl,key:"Name"})}}},gr=class{constructor(t,r){this.$container=t,this.data=r||[]}render(){let t={dataSource:this.data,editing:{mode:"row",allowAdding:!0,allowDeleting:!0,allowUpdating:!0,useIcons:!0},headerFilter:{visible:!1},grouping:{contextMenuEnabled:!1},groupPanel:{visible:!1},searchPanel:{visible:!1},filterRow:{visible:!1},remoteOperations:!1,selection:{mode:"none"},columns:[{dataField:"value",allowEditing:!0},{dataField:"title",allowEditing:!0},{dataField:"image",allowEditing:!0,cellTemplate:(i,n)=>{$("<div>").css({"text-align":"center"}).append($("<img>",{src:n.data.image})).appendTo(i)},editCellTemplate:(i,n)=>{let s=n.value||"",l=$('<div style="position: relative; display: flex; align-items: center; justify-content: center;" />'),g=$(`<img src="${s}" />`),p=$('<a class="dx-link dx-icon-upload" style="position: absolute; right: 8px; text-decoration: none; font-size: 18px;" />'),y=$('<input type="file" style="display:none;" />');return p.on("click",()=>{y.click()}),y.on("change",m=>{if(m.target.files.length){let T=new FileReader;T.onloadend=()=>{g.attr("src",T.result),n.setValue(T.result)};let S=m.target.files[0];S?T.readAsDataURL(S):g.attr("src","")}}),g.appendTo(l),p.appendTo(l),y.appendTo(l),l}},{type:"buttons",width:100,buttons:["edit",{hint:"Delete",icon:"trash",onClick:i=>{let n=this.grid.option("dataSource");n.splice(i.row.rowIndex,1),this.grid.option("dataSource",n)}}]}]},r=$("<div />").appendTo(this.$container);this.grid=G(r,{options:t,isFullScreen:!1})}getData(){return this.grid.option("dataSource")}},pr=class{constructor(t,r){this.$container=t,this.data=r||[]}render(){let t={dataSource:this.data,editing:{mode:"row",allowAdding:!0,allowDeleting:!0,allowUpdating:!0,useIcons:!0},headerFilter:{visible:!1},grouping:{contextMenuEnabled:!1},groupPanel:{visible:!1},searchPanel:{visible:!1},filterRow:{visible:!1},remoteOperations:!1,selection:{mode:"none"},columns:[{dataField:"value",allowEditing:!0},{type:"buttons",width:100,buttons:["edit",{hint:"Delete",icon:"trash",onClick:i=>{let n=this.grid.option("dataSource");n.splice(i.row.rowIndex,1),this.grid.option("dataSource",n)}}]}]},r=$("<div />").appendTo(this.$container);this.grid=G(r,{options:t,isFullScreen:!1})}getData(){return this.grid.option("dataSource")}},ur=class{constructor(t,r,i){this.$container=t,this.data=r,this.initData=i}render(){this.form=$("<div />").dxForm({formData:this.data,labelLocation:"top",items:[{dataField:"actionType",validationRules:[{type:"required"}]},{dataField:"fields",validationRules:[{type:"required"},{type:"custom",validationCallback:t=>t.value.length>0,message:"Required"}],editorType:"dxTagBox",editorOptions:{dataSource:this.initData.fields,displayExpr:"Text",valueExpr:"Value",searchEnabled:!0}}]}).appendTo(this.$container).dxForm("instance")}getData(){if(!this.form.validate().isValid)return;let r=this.form.getEditor("actionType").option("value"),i=this.form.getEditor("fields").option("value");return{actionType:r,fields:i}}},cr=class{constructor(t,r){this.$container=t,this.data={url:typeof(r==null?void 0:r.url)>"u"?"":r.url,text:typeof(r==null?void 0:r.text)>"u"?"":r.text,openNewTab:typeof(r==null?void 0:r.openNewTab)>"u"?!0:r.openNewTab,useStaticLink:r?typeof r.useStaticLink>"u"?!0:r.useStaticLink:!1}}render(){this.form=$("<div />").dxForm({formData:this.data,labelLocation:"top",items:[{dataField:"useStaticLink",editorType:"dxCheckBox",editorOptions:{onValueChanged:t=>{this.form.itemOption("url","visible",t.value)}}},{visible:this.data.useStaticLink,dataField:"url",validationRules:[{type:"required"}]},{dataField:"text",label:{text:"Text (optional)"}},{dataField:"openNewTab",label:{text:"Open in a new tab"},editorType:"dxCheckBox"}]}).appendTo(this.$container).dxForm("instance")}getData(){var l;if(!this.form.validate().isValid)return;let r=(l=this.form.getEditor("url"))==null?void 0:l.option("value"),i=this.form.getEditor("text").option("value"),n=this.form.getEditor("openNewTab").option("value"),s=this.form.getEditor("useStaticLink").option("value");return{url:r,text:i,openNewTab:n,useStaticLink:s}}},hr=class{constructor(t){this.$container=t}render(){}getData(){return{}}},mr=class{constructor(t,r){this.$container=t,this.data={multiple:(r==null?void 0:r.multiple)||!1}}render(){this.form=$("<div />").dxForm({formData:this.data,labelLocation:"top",items:[{dataField:"multiple",editorType:"dxCheckBox",visible:!1}]}).appendTo(this.$container).dxForm("instance")}getData(){return this.form.option("formData")}},fr=class{constructor(t,r){this.$container=t,this.data={multiple:(r==null?void 0:r.multiple)||!1,showPreview:(r==null?void 0:r.showPreview)||!1}}render(){this.form=$("<div />").dxForm({formData:this.data,labelLocation:"top",items:[{dataField:"multiple",editorType:"dxCheckBox",visible:!1},{dataField:"showPreview",editorType:"dxCheckBox",visible:!1}]}).appendTo(this.$container).dxForm("instance")}getData(){return this.form.option("formData")}};DevExpress.ui.dxDataGrid.registerModule("columnChooserSorting",{extenders:{controllers:{columns:{getChooserColumns(o){return this.callBase(o).sort((r,i)=>{let n=(r==null?void 0:r.caption)||"",s=(i==null?void 0:i.caption)||"";return n.localeCompare(s)})}}}}});var Li=(o,t)=>{if(o===null||t===null||o.length!==t.length)return!1;for(let r=0;r<o.length;r++)if(o[r]!==t[r])return!1;return!0},He=o=>{let t=null,r=null;return function(...i){return Li(t,i)||(r=o(...i)),t=i,r}};var he=class{constructor(t){this._currentViewId=he.defaultControlDisplayView.id;this.views=he.defaultViews;this.getViewByIdInternal=t=>this.views&&this.views.find(r=>r.id===t);this.getViewById=He(this.getViewByIdInternal);this.loadDataUrl=t.loadDataUrl,this.insertDataUrl=t.insertDataUrl,this.updateDataUrl=t.updateDataUrl,this.deleteDataUrl=t.deleteDataUrl}get currentView(){return this.getViewById(this._currentViewId)}get currentViewId(){return this._currentViewId}set currentViewId(t){this._currentViewId=t}async getViews(){return this.views===he.defaultViews&&await this.loadViews(),this.views}updateCurrentView(t){return this.updateView(this.currentView.id,t)}async createNewView(t,r,i){let n=this.mapViewModelToDto({id:-1,name:t,gridState:r,isGlobal:i});return n=await x(this.insertDataUrl,"POST",n),await this.loadViews(),this.mapViewDtoToModel(n)}async updateView(t,r){if(t===he.defaultControlDisplayView.id)return!1;let i=this.getViewById(t);if(!i)return!1;let n=A(A({},i),r),s=this.mapViewModelToDto(n);return s=await x(this.updateDataUrl,"PUT",s),await this.loadViews(),!0}async deleteView(t){return t===he.defaultControlDisplayView.id||!this.getViewById(t)?!1:(await x(this.deleteDataUrl,"DELETE",{viewId:t}),await this.loadViews(),!0)}async loadViews(){let t=await se(this.loadDataUrl);return this.views=t.map(r=>this.mapViewDtoToModel(r)),this.views.unshift(he.defaultControlDisplayView),this.resetCachedResultOfGetViewByIdFunction(),this.views}mapViewModelToDto(t){return{Id:t.id,Name:t.name,GridState:JSON.stringify(t.gridState),IsGlobal:t.isGlobal}}mapViewDtoToModel(t){return{id:t.Id,name:t.Name,gridState:JSON.parse(t.GridState),isGlobal:t.IsGlobal}}resetCachedResultOfGetViewByIdFunction(){this.getViewById=He(this.getViewByIdInternal)}},k=he;k.defaultControlDisplayView={id:0,name:"Default",gridState:null,isGlobal:!1},k.defaultViews=[he.defaultControlDisplayView];var uo=class{constructor(t){this.options=t,this.currentSavedGridState=t.initialState,this.options.owner.option("stateStoring",{enabled:!0,type:"custom",customLoad:()=>Promise.resolve(this.currentSavedGridState)})}get hasChanges(){return this.currentSavedGridState!==null&&JSON.stringify(this.currentUnsavedGridState)!==JSON.stringify(this.currentSavedGridState)}get currentUnsavedGridState(){return this.prepareUnsavedGridState(this.options.owner.state())}async apply(t,r=!0){return new Promise((i,n)=>{let s=r?void 0:this.options.owner.filter();this.options.owner.beginUpdate(),this.options.owner.clearFilter("filterValue"),this.options.owner.state(t);let l=this.options.owner.getVisibleColumns().filter(p=>!p.type);l[0]&&l[0].dataField&&this.options.owner.option("summary",{totalItems:[{column:l[0].dataField,summaryType:"count"}]}),s&&this.options.owner.filter(s),this.options.owner.endUpdate();let g=()=>{this.save(),i(),this.options.owner.off("contentReady",g)};this.options.owner.on("contentReady",g)})}save(){this.currentSavedGridState=this.currentUnsavedGridState}reset(){this.options.owner.state(this.currentSavedGridState)}prepareUnsavedGridState(t){if(t.columns){let r=t.columns.filter(n=>n.visible),i=r[r.length-1];i.width=void 0}return t}};var co=class{constructor(t){this.onGridToolbarPreparing=t=>{let r=t.toolbarOptions&&t.toolbarOptions.items;!r||(this.removeDefaultColumnChooserButton(r),r.splice(1,0,this.viewsToolbarItem))};this.options=O(A({},t),{gridStateManager:t.gridStateManager?t.gridStateManager:new uo({owner:t.owner,initialState:null}),gridViewsManager:t.gridViewsManager?t.gridViewsManager:new k(t.gridViewsManagerOptions),autoIntegration:t.autoIntegration!==void 0&&t.autoIntegration!==null?t.autoIntegration:!0}),this.options.autoIntegration&&this.integrateToGrid(this.options.owner)}async tryApplyView(t){let r=await this.confirmChangesLoss();return r&&await this.applyView(t),r}async applyView(t){this.beginViewApplyingLoading(),this.options.gridViewsManager.currentViewId=t,await this.options.gridStateManager.apply(this.options.gridViewsManager.currentView.gridState,!1),this.endViewApplyingLoading(),this.syncUIWithCurrentView(),this.options.onViewApplied&&this.options.onViewApplied(t)}integrateToGrid(t){let r=t.option("onToolbarPreparing");t.option("onToolbarPreparing",i=>{r&&r(i),this.onGridToolbarPreparing(i)})}removeDefaultColumnChooserButton(t){t.splice(t.findIndex(r=>r.name==="columnChooserButton"),1)}get viewsToolbarItem(){return this._viewsToolbarItem||(this._viewsToolbarItem=this.createViewsToolbarItem()),this._viewsToolbarItem}get isDefaultView(){return this.options.gridViewsManager.currentViewId===k.defaultControlDisplayView.id}get hasChanges(){let t=this.options.gridViewsManager.currentView;return this.currentViewTitle?this.currentViewTitle.option("value")!==t.name||this.options.gridStateManager.hasChanges:!1}createViewsToolbarItem(){let t=!0;return{widget:"dxDropDownBox",location:"after",text:"Views",visible:this.options.visible,cssClass:"aps-views__toolbar-item",options:{elementAttr:{class:"iszolea-md"},items:[k.defaultControlDisplayView],value:k.defaultControlDisplayView.id,valueExpr:"id",displayExpr:"name",width:200,dropDownOptions:{width:550},onInitialized:r=>{this.viewsDropdownBox=r.component,this.loadViewDropdownBoxData()},onValueChanged:async r=>{if(r.value===this.options.gridViewsManager.currentViewId||!t){t=!0;return}await this.tryApplyView(r.value)||(t=!1,this.syncUIWithCurrentView(!0))},contentTemplate:r=>{if(!r.component)return;this.viewsDataGrid=this.createViewsDataGrid(r.component),this.currentViewTitle=this.createCurrentViewTitle(r.component),this.saveViewButton=this.createSaveViewButton(),this.saveViewAsButton=this.createSaveViewAsButton(),this.columnChooserButton=this.createColumnChooserButton();let i=$("<div />").addClass("aps-views__header").append(this.currentViewTitle.element()).append(this.saveViewButton.element()).append(this.saveViewAsButton.element()).append(this.columnChooserButton.element());return $("<div />").height("100%").append(i).append(this.viewsDataGrid.element())}}}}createViewsDataGrid(t){return $("<div />").dxDataGrid({dataSource:t.getDataSource(),remoteOperations:!1,editing:{allowAdding:!1,allowUpdating:!0,allowDeleting:!0,mode:"cell",useIcons:!0,texts:{confirmDeleteMessage:"Are you sure you want to delete this view?"}},wordWrapEnabled:!0,loadPanel:{shading:!0},columns:[{dataField:"name",allowEditing:!1},{dataField:"isGlobal",caption:"Is Global",dataType:"boolean",width:70},{type:"buttons",buttons:[{name:"delete",visible:r=>r.row&&r.row.key!==k.defaultControlDisplayView.id}]}],keyboardNavigation:{editOnKeyPress:!1,enabled:!1},showColumnHeaders:!0,hoverStateEnabled:!0,focusedRowEnabled:!1,showBorders:!1,showColumnLines:!1,selection:{mode:"single"},height:"calc(100% - 51px)",scrolling:{mode:"standard"},paging:{enabled:!1},noDataText:"No views",onSelectionChanged:r=>{t.option("value",r.selectedRowKeys&&r.selectedRowKeys.length?r.selectedRowKeys[0]:0)},onEditorPreparing:r=>{if(r.dataField==="isGlobal"){r.editorOptions.disabled=!this.options.canCreateGlobalViews,r.editorOptions.visible=r.row.data.id!==k.defaultControlDisplayView.id;let i=r.editorOptions.onValueChanged;r.editorOptions.onValueChanged=async n=>{r.component.beginCustomLoading("Updating"),await this.options.gridViewsManager.updateView(r.row.data.id,{isGlobal:n.value}),r.component.endCustomLoading(),i(n)}}},onCellPrepared:r=>{if(r.column.type!=="buttons"||!r.data)return;!r.data.isGlobal||r.data.isGlobal&&this.options.canCreateGlobalViews||Array.from(r.cellElement.children()).forEach(n=>{$(n).css({color:"#ddd !important",cursor:"default"}).off("click")})},onRowRemoving:r=>{!r.key||this.deleteView(r.key)}}).dxDataGrid("instance")}createCurrentViewTitle(t){return $("<div />").addClass("aps-views__current-view iszolea-md").dxTextBox({value:t.option("text")||t.option("placeholder"),readOnly:this.isDefaultView}).dxTextBox("instance")}createSaveViewButton(){return $("<button />").addClass("aps-views__save-view iszolea-md").dxButton({text:"Save",type:"normal",disabled:this.isDefaultView,onClick:this.save.bind(this),icon:"save",width:87}).dxButton("instance")}createSaveViewAsButton(){return $("<button />").addClass("aps-views__save-view-as iszolea-md").dxButton({text:"Save As",type:"normal",onClick:this.createSaveAsDialog.bind(this),icon:"save",width:118}).dxButton("instance")}createColumnChooserButton(){return $("<button />").addClass("aps-views__column-chooser iszolea-md").dxButton({onClick:this.openColumnChooser.bind(this),icon:"column-chooser"}).dxButton("instance")}createSaveAsDialog(){let t=$("<div />"),r=$('<div style="margin-bottom:8px;" />').dxTextBox({placeholder:"View Name",showClearButton:!0}).dxValidator({validationRules:[{type:"required"}]}),i=r.dxTextBox("instance"),n=r.dxValidator("instance");i.element().appendTo(t);let s=$('<div style="margin-bottom:16px;" />').dxCheckBox({text:"Global view",disabled:!this.options.canCreateGlobalViews}).dxCheckBox("instance");return s.element().appendTo(t),K({title:"Create New View",height:"auto",width:"100%",maxWidth:"300px"},t,{text:"Ok",onClick:async l=>{!n.validate().isValid||(await this.saveAs(i.option("value"),s.option("value")),l())}},{text:"Cancel",onClick:l=>l()})}openColumnChooser(){this.options.owner.showColumnChooser()}async loadViewDropdownBoxData(){if(!this.viewsDropdownBox)return;let t=await this.options.gridViewsManager.getViews(),r=new DevExpress.data.ArrayStore({key:"id",data:t});this.viewsDropdownBox.option("dataSource",r),this.viewsDropdownBox.option("value",this.options.gridViewsManager.currentViewId),this.viewsDataGrid&&this.viewsDataGrid.option("dataSource",r)}async save(){!this.hasChanges||(this.options.gridStateManager.save(),await this.options.gridViewsManager.updateCurrentView({name:this.currentViewTitle.option("value"),gridState:this.options.gridStateManager.currentSavedGridState}),U("Saved",!0),await this.loadViewDropdownBoxData())}async saveAs(t,r){if(!this.options.gridStateManager)return;this.options.gridStateManager.save();let i=await this.options.gridViewsManager.createNewView(t,this.options.gridStateManager.currentSavedGridState,r);await this.loadViewDropdownBoxData(),await this.applyView(i.id),U("View is created",!0)}async deleteView(t){await this.options.gridViewsManager.deleteView(t),this.options.onViewDeleted&&this.options.onViewDeleted(t),await this.loadViewDropdownBoxData(),this.options.gridViewsManager.currentViewId!==k.defaultControlDisplayView.id&&await this.applyView(k.defaultControlDisplayView.id)}beginViewApplyingLoading(){this.currentViewTitle&&this.currentViewTitle.option("readOnly",!0),this.saveViewButton&&this.saveViewButton.option("disabled",!0),this.saveViewAsButton&&this.saveViewAsButton.option("disabled",!0),this.viewsDataGrid&&this.viewsDataGrid.beginCustomLoading("Applying...")}endViewApplyingLoading(){this.currentViewTitle&&this.currentViewTitle.option("readOnly",!1),this.saveViewButton&&this.saveViewButton.option("disabled",!1),this.saveViewAsButton&&this.saveViewAsButton.option("disabled",!1),this.viewsDataGrid&&this.viewsDataGrid.endCustomLoading()}syncUIWithCurrentView(t=!1){!t&&this.currentViewTitle&&(this.currentViewTitle.option("value",this.options.gridViewsManager.currentView.name),this.currentViewTitle.option("readOnly",this.isDefaultView)),this.viewsDropdownBox.option("value",this.options.gridViewsManager.currentViewId),setTimeout(()=>{this.viewsDataGrid&&(this.options.gridViewsManager.currentViewId===k.defaultControlDisplayView.id?this.viewsDataGrid.selectRowsByIndexes([0]):this.viewsDataGrid.selectRows([this.options.gridViewsManager.currentViewId],!1))},0);let r=this.options.gridViewsManager.currentView.isGlobal&&!this.options.canCreateGlobalViews;this.saveViewButton&&this.saveViewButton.option("disabled",this.isDefaultView||r)}async confirmChangesLoss(){return this.hasChanges?DevExpress.ui.dialog.confirm("You have unsaved changes that will be lost if you close this popup. Do you want to close the popup and not save changes?","Unsaved changes"):!0}};var nt=class{constructor(t){this.getFilterByIdInternal=t=>this.filters&&this.filters.find(r=>r.id===t);this.getFilterById=He(this.getFilterByIdInternal);this.loadDataUrl=t.loadDataUrl,this.insertDataUrl=t.insertDataUrl,this.updateDataUrl=t.updateDataUrl,this.deleteDataUrl=t.deleteDataUrl}get currentFilter(){return this.getFilterById(this._currentFilterId)}get currentFilterId(){return this._currentFilterId}set currentFilterId(t){this._currentFilterId=t}async getFilters(){return this.filters||await this.loadFilters(),this.filters}updateCurrentFilter(t){return!!this.currentFilter&&this.updateFilter(this.currentFilter.id,t)}async createNewFilter(t,r,i,n){let s=this.mapFilterModelToDto({id:-1,name:t,isDefault:i,isGlobal:n,filterState:r});return s=await x(this.insertDataUrl,"POST",s),await this.loadFilters(),this.mapFilterDtoToModel(s)}async updateFilter(t,r){let i=this.getFilterById(t);if(!i)return!1;let n=A(A({},i),r),s=this.mapFilterModelToDto(n);return s=await x(this.updateDataUrl,"PUT",s),await this.loadFilters(),!0}async deleteFilter(t){return this.getFilterById(t)?(await x(this.deleteDataUrl,"DELETE",{filterId:t}),await this.loadFilters(),!0):!1}async loadFilters(){let t=await se(this.loadDataUrl);return this.filters=t.map(r=>this.mapFilterDtoToModel(r)),this.resetCachedResultOfGetFilterByIdFunction(),this.filters}mapFilterModelToDto(t){return{Id:t.id,Name:t.name,IsDefault:t.isDefault,IsGlobal:t.isGlobal,FilterState:JSON.stringify(t.filterState)}}mapFilterDtoToModel(t){return{id:t.Id,name:t.Name,isDefault:t.IsDefault||!1,isGlobal:t.IsGlobal||!1,filterState:JSON.parse(t.FilterState)}}resetCachedResultOfGetFilterByIdFunction(){this.getFilterById=He(this.getFilterByIdInternal)}};var ho=class{constructor(t){this.isInFilterApplying=!1;this.onGridToolbarPreparing=t=>{let r=t.toolbarOptions&&t.toolbarOptions.items;!r||r.splice(1,0,this.filtersToolbarItem)};this.options=O(A({},t),{gridFiltersManager:t.gridFiltersManager?t.gridFiltersManager:new nt(t.gridFiltersManagerOptions),autoIntegration:t.autoIntegration!==void 0&&t.autoIntegration!==null?t.autoIntegration:!0}),this.options.autoIntegration&&this.integrateToGrid(this.options.owner),this.filterExpressionCalculator=$("<div />").dxFilterBuilder({fields:this.getFlatColumnsList(this.options.owner.option("columns"))}).dxFilterBuilder("instance")}async tryApplyFilter(t){let r=await this.confirmChangesLoss();return r&&await this.applyFilter(t),r}async applyFilter(t,r=!1){this.isInFilterApplying=!0,this.options.gridFiltersManager.currentFilterId=t,this.updateFilterPopupContent(this.options.gridFiltersManager.currentFilter),this.filtersDropdownBox.option("value",this.options.gridFiltersManager.currentFilterId);let i=this.options.owner.getDataSource();if(this.options.gridFiltersManager.currentFilter){this.filterExpressionCalculator.option("value",this.options.gridFiltersManager.currentFilter.filterState);let n=this.filterExpressionCalculator.getFilterExpression();if(i.isLoading()){let s=()=>{i.off("loadingChanged",s),setTimeout(()=>{i=this.options.owner.getDataSource(),i.filter(n)})};i.on("loadingChanged",s)}else i.filter(n)}else i.filter(null);r||await i.load(),this.options.onFilterApplied&&this.options.onFilterApplied(t),this.isInFilterApplying=!1}integrateToGrid(t){let r=t.option("onToolbarPreparing");t.option("onToolbarPreparing",i=>{r&&r(i),this.onGridToolbarPreparing(i)})}get filtersToolbarItem(){return this._filtersToolbarItem||(this._filtersToolbarItem=this.createFiltersToolbarItem()),this._filtersToolbarItem}get filterPopup(){return this._filterPopup||(this._filterPopup=this.createFilterPopup()),this._filterPopup}get hasChanges(){let t=this.options.gridFiltersManager.currentFilter,r=this.filterNameTextBox&&this.filterNameTextBox.option("value"),i=t&&t.name,n=this.filterBuilder&&this.filterBuilder.option("value"),s=t&&t.filterState,l=this.filterIsGlobalCheckbox&&this.filterIsGlobalCheckbox.option("value"),g=t&&t.isGlobal;return r!==i||n!==s||l!==g}createFiltersToolbarItem(){let t=!0;return{widget:"dxDropDownBox",location:"after",text:"Data Sets",visible:this.options.visible,cssClass:"aps-filters__toolbar-item",options:{elementAttr:{class:"iszolea-md"},value:this.options.gridFiltersManager.currentFilterId,valueExpr:"id",displayExpr:"name",showClearButton:!0,placeholder:"None",width:200,dropDownOptions:{width:500},onInitialized:async r=>{this.filtersDropdownBox=r.component;let[,i]=await Promise.all([this.loadFilterDropdownBoxData(),this.options.apsControlDisplayUserSettingsManager.getUserSettings()]);i.defaultFilterId&&r.component.option("value",i.defaultFilterId)},onValueChanged:async r=>{if(this.isInFilterApplying)return;if(!t){t=!0;return}let i=r.value;await this.tryApplyFilter(i)||(t=!1,i=r.previousValue,r.component.option("value",i)),this.filtersDataGrid&&this.filtersDataGrid.selectRows(i,!1),this.currentFilterTitle&&this.currentFilterTitle.option("value",r.component.option("text")||r.component.option("placeholder"))},onOpened:r=>{!r.component||this.filtersDataGrid&&this.filtersDataGrid.selectRows(r.component.option("value"),!1)},contentTemplate:r=>{if(!r.component)return;this.filtersDataGrid=this.createFiltersDataGrid(r.component),this.currentFilterTitle=this.createCurrentFilterTitle(r.component),this.newFilterButton=this.createNewFilterButton();let i=$("<div />").addClass("aps-filters__header").append(this.currentFilterTitle.element()).append(this.newFilterButton.element());return $("<div />").css("height","100%").append(i).append(this.filtersDataGrid.element())}}}}createFiltersDataGrid(t){return $("<div />").dxDataGrid({dataSource:t.getDataSource(),remoteOperations:!1,editing:{allowAdding:!1,allowUpdating:!0,allowDeleting:!0,mode:"cell",useIcons:!0,texts:{confirmDeleteMessage:"Are you sure you want to delete this data set?"}},wordWrapEnabled:!0,columns:[{dataField:"name",allowEditing:!1},{dataField:"isDefault",caption:"Is Default",dataType:"boolean",width:80},{dataField:"isGlobal",caption:"Is Global",dataType:"boolean",width:70},{type:"buttons",buttons:[{icon:"edit",hint:"Edit",onClick:async r=>{if(!r.row||!r.row.key)return;await this.tryApplyFilter(r.row.key)&&!this.filterPopup.option("visible")&&this.openEditFilterPopup(this.options.gridFiltersManager.currentFilter)}},"delete"]}],keyboardNavigation:{editOnKeyPress:!1,enabled:!1},showColumnHeaders:!0,hoverStateEnabled:!0,focusedRowEnabled:!1,showBorders:!1,showColumnLines:!1,selection:{mode:"single"},height:"calc(100% - 51px)",scrolling:{mode:"standard"},paging:{enabled:!1},noDataText:"No data sets",onSelectionChanged:r=>{t.option("value",r.selectedRowKeys?r.selectedRowKeys[0]:null)},onEditorPreparing:r=>{if(r.dataField==="isGlobal"){r.editorOptions.disabled=!this.options.canCreateGlobalFilters;let i=r.editorOptions.onValueChanged;r.editorOptions.onValueChanged=async n=>{r.component.beginCustomLoading("Updating"),await this.options.gridFiltersManager.updateFilter(r.row.data.id,{isGlobal:n.value}),r.component.endCustomLoading(),i(n)}}},onCellPrepared:r=>{r.column.type!=="buttons"||!r.data||r.column.type==="buttons"&&(!r.data.isGlobal||r.data.isGlobal&&this.options.canCreateGlobalFilters||Array.from(r.cellElement.children()).forEach(n=>{$(n).css({color:"#ddd !important",cursor:"default"}).off("click")}))},onRowUpdating:r=>{if(!r.key||r.newData.isDefault===void 0)return;let i=r.component.getDataSource().items().find(n=>n.isDefault);i&&(i.isDefault=!1),this.options.apsControlDisplayUserSettingsManager.updateUserSettings({defaultFilterId:r.newData.isDefault?r.key:void 0})},onRowRemoving:r=>{!r.key||this.deleteFilter(r.key)}}).dxDataGrid("instance")}createCurrentFilterTitle(t){return $("<div />").addClass("aps-filters__current-filter").dxTextBox({value:t.option("text")||t.option("placeholder"),readOnly:!0}).dxTextBox("instance")}createNewFilterButton(){return $("<button />").addClass("aps-filters__add-new-filter iszolea-md").dxButton({text:"New Data Set",type:"normal",onClick:()=>{this.openNewFilterPopup()},icon:"plus"}).dxButton("instance")}createFilterPopup(){let t=$("<div />").appendTo("body"),r=!1;return t.dxPopup({container:this.options.owner.element(),shading:!1,resizeEnabled:!0,width:650,height:500,onShowing:i=>{this.filtersDropdownBox&&this.filtersDropdownBox.close()},onHiding:async i=>{if(!this.hasChanges||r){r=!1;return}i.cancel=!0,r=await this.confirmChangesLoss(),r&&(i.component.hide(),this.filtersDropdownBox&&this.filtersDropdownBox.open())}}).dxPopup("instance")}createFilterNameTextBox(){return $("<div />").dxTextBox({placeholder:"Enter Data Set Name..."}).dxTextBox("instance")}createFilterIsGlobalCheckbox(){return $("<div />").dxCheckBox({text:"Global data set"}).dxCheckBox("instance")}getFlatColumnsList(t,...r){let i=[];for(let n of t)if(n.columns&&n.columns.length>0){let s=this.getFlatColumnsList(n.columns);i=i.concat(s)}else{let s=$.extend({},n);if(s.dataType==="date"||s.dataType==="datetime"){let l=s.dataType==="datetime",g="dd MMM yy",y=l?"hh:mm, dd MMM yy":g,m=T=>{let S=T.split(", "),_=DevExpress.localization.parseDate(S[1],g)||null;if(_){let w=S[0].split(":");return _.setHours(parseInt(w[0])),_.setMinutes(parseInt(w[1])),_}else return null};s.format=y,s.editorTemplate=T=>$("<div />").dxDateBox({displayFormat:y,type:l?"datetime":"date",width:150,onValueChanged:({value:S})=>{T.setValue(DevExpress.localization.formatDate(S,y))},value:(l?m(T.value):DevExpress.localization.parseDate(T.value,y))||null}),s.filterOperations=["=","<>","<",">","<=",">=","isblank","isnotblank"],s.calculateFilterExpression=function(T){let S=[t,...r];return S[0]&&(l?S[0]=m(S[0]):S[0]=DevExpress.localization.parseDate(T,y)||null),this.defaultCalculateFilterExpression(...S)}}i.push(s)}return i.sort((n,s)=>{let l=(n.caption||"").toLowerCase(),g=(s.caption||"").toLowerCase();return l<g?-1:l>g?1:0})}createFilterBuilder(){return $("<div />").dxFilterBuilder({fields:this.getFlatColumnsList(this.options.owner.option("columns"))}).dxFilterBuilder("instance")}createFilterPopupContent(t){let r=$("<div />").height("100%"),i=$('<div class="aps-filters__name-container" />').height("36px");this.filterNameTextBox=this.createFilterNameTextBox(),this.filterBuilder=this.createFilterBuilder(),this.filterIsGlobalCheckbox=this.createFilterIsGlobalCheckbox(),this.filterNameTextBox.option("value",t&&t.name),this.filterNameTextBox.element().appendTo(i),this.filterIsGlobalCheckbox.option("value",t&&t.isGlobal),this.filterIsGlobalCheckbox.element().appendTo(i),this.filterIsGlobalCheckbox.option("disabled",!this.options.canCreateGlobalFilters),i.appendTo(r),this.filterBuilder.option("value",t&&t.filterState);let n=$("<div />").height("calc(100% - 36px)").appendTo(r);return this.filterBuilder.element().appendTo(n),n.dxScrollView({scrollByContent:!0}),r}createFilterPopupToolbarItems(t){return t?[this.createUpdateFilterPopupToolbarItem(),this.createSaveFilterAsNewPopupToolbarItem(),this.createResetFilterPopupToolbarItem(),this.createDeleteFilterPopupToolbarItem()]:[this.createSaveFilterPopupToolbarItem()]}createSaveFilterPopupToolbarItem(){return{toolbar:"bottom",widget:"dxButton",location:"before",options:{text:"Apply and Save",onClick:this.createNewFilter.bind(this),icon:"save"}}}createUpdateFilterPopupToolbarItem(){return{toolbar:"bottom",widget:"dxButton",location:"before",options:{text:"Apply and Update",onClick:()=>{!this.options.gridFiltersManager.currentFilter||this.updateFilter(this.options.gridFiltersManager.currentFilter)},icon:"save"}}}createSaveFilterAsNewPopupToolbarItem(){return{toolbar:"bottom",widget:"dxButton",location:"before",options:{text:"Save As New",onClick:this.createNewFilter.bind(this),icon:"save"}}}createResetFilterPopupToolbarItem(){return{toolbar:"bottom",widget:"dxButton",location:"before",options:{text:"Reset",onClick:async()=>{!this.hasChanges||!this.filterBuilder||!this.options.gridFiltersManager.currentFilter||!await DevExpress.ui.dialog.confirm("Are you sure you want to reset unsaved changes?","Reset the data set")||this.resetChanges()},icon:"undo"}}}createDeleteFilterPopupToolbarItem(){return{toolbar:"bottom",widget:"dxButton",location:"before",options:{text:"Delete Data Set",onClick:async()=>{!this.options.gridFiltersManager.currentFilter||!await DevExpress.ui.dialog.confirm(`Are you sure you want to delete the "${this.options.gridFiltersManager.currentFilter.name}" data set?`,"Delete the data set")||(await this.deleteFilter(this.options.gridFiltersManager.currentFilterId),this.filterPopup.hide())},icon:"trash"}}}async openNewFilterPopup(){!await this.tryApplyFilter(void 0)||(this.updateFilterPopupContent(),this.filterPopup.show())}openEditFilterPopup(t){this.updateFilterPopupContent(t),this.filterPopup.show()}updateFilterPopupContent(t){let r=this.filterPopup.option("animation");this.filterPopup.option("animation",void 0),this.filterPopup.option("title",t?`Edit the "${t.name}" data set`:"Create a new data set"),this.filterPopup.option("contentTemplate",()=>this.createFilterPopupContent(t)),this.filterPopup.option("toolbarItems",this.createFilterPopupToolbarItems(t)),this.filterPopup.repaint(),this.filterPopup.option("animation",r)}async createNewFilter(){if(!this.filterNameTextBox||!this.filterBuilder||!this.filterIsGlobalCheckbox)return;let t=this.filterNameTextBox.option("value"),r=this.filterBuilder.option("value"),i=!1,n=this.filterIsGlobalCheckbox.option("value");if(!t)return;let s=await this.options.gridFiltersManager.createNewFilter(t,r,i,n);await this.loadFilterDropdownBoxData(),await this.applyFilter(s.id),U("Created",!0)}async updateFilter(t){if(!this.filterNameTextBox||!this.filterBuilder||!this.filterIsGlobalCheckbox)return;let r=this.filterNameTextBox.option("value"),i=this.filterBuilder.option("value"),n=this.filterIsGlobalCheckbox.option("value");!r||!await this.options.gridFiltersManager.updateFilter(t.id,{name:r,filterState:i,isGlobal:n})||(U("Updated",!0),await this.applyFilter(this.options.gridFiltersManager.currentFilter.id),await this.loadFilterDropdownBoxData())}async deleteFilter(t){await this.options.gridFiltersManager.deleteFilter(t),this.options.onFilterDeleted&&this.options.onFilterDeleted(t),await this.applyFilter(void 0),await this.loadFilterDropdownBoxData()}resetChanges(){this.filterNameTextBox.option("value",this.options.gridFiltersManager.currentFilter.name),this.filterBuilder.option("value",this.options.gridFiltersManager.currentFilter.filterState),this.filterIsGlobalCheckbox.option("value",this.options.gridFiltersManager.currentFilter.isGlobal)}async loadFilterDropdownBoxData(){if(!this.filtersDropdownBox)return;let[t,r]=await Promise.all([this.options.apsControlDisplayUserSettingsManager.getUserSettings(),this.options.gridFiltersManager.getFilters()]);if(t.defaultFilterId){let n=r.find(s=>s.id===t.defaultFilterId);n&&(n.isDefault=!0)}let i=new DevExpress.data.ArrayStore({key:"id",data:r});this.filtersDropdownBox.option("dataSource",i),this.filtersDataGrid&&this.filtersDataGrid.option("dataSource",i)}async confirmChangesLoss(){return await new Promise(t=>setTimeout(()=>t(),0)),!this.hasChanges||!this.filterPopup.option("visible")?!0:DevExpress.ui.dialog.confirm("You have unsaved changes that will be lost if you close this popup. Do you want to close the popup and not save changes?","Unsaved changes")}};var st=class{constructor(t){this.$container=t.$container,this.cssClass=t.cssClass,this.maxFileSize=t.maxFileSize,this.acceptedFileTypes=t.acceptedFileTypes,this.selectButtonText=t.selectButtonText,this.allowedFileExtensions=t.allowedFileExtensions,this.onValueChanged=t.onValueChanged,this.onUploadStarted=t.onUploadStarted,this.onUploaded=t.onUploaded}render(){let t=$("<div />");this.cssClass&&t.addClass(this.cssClass),this.fileUploader=t.dxFileUploader({selectButtonText:this.selectButtonText,labelText:"",allowedFileExtensions:this.allowedFileExtensions,accept:this.acceptedFileTypes,uploadMode:"useForm",maxFileSize:this.maxFileSize,showFileList:!1,onValueChanged:r=>{var i;r.component.option("labelText",r.value[0]?r.value[0].name:""),(i=this.onValueChanged)==null||i.call(this,r)},onUploadStarted:r=>{var i;r.element.find(".dx-fileuploader-upload-button").hide(),(i=this.onUploadStarted)==null||i.call(this,r)},onUploaded:r=>{var i;(i=this.onUploaded)==null||i.call(this,r)}}).dxFileUploader("instance"),this.$container.append(this.fileUploader.element())}upload(t,r){return new Promise((i,n)=>{let s=new FormData,l=this.fileUploader.element().find("input")[0].files[0];s.append("file",l);for(let g in r)s.append(g,r[g]);$.ajax({url:t,type:"post",data:s,contentType:!1,processData:!1,success:g=>{g.RequestState===1?i(g.Data):n(g.Message)},error:g=>n("Unknown error")})})}};var _t=class extends J{constructor(t){super();this.fileUploadUrl=t.fileUploadUrl,this.$container=t.$container,this.title=t.title,this.getTablesListUrl=t.getTablesListUrl,this.createTableUrl=t.createTableUrl,this.addRowsUrl=t.addRowsUrl,this.predefinedTable=t.predefinedTable,this.canChangeMode=t.predefinedImportFileMode===void 0,this.mode=t.predefinedImportFileMode!==void 0?t.predefinedImportFileMode:0,this.createTableButtonText=t.createTableButtonText||"Create Table",this.updateTableButtonText=t.updateTableButtonText||"Add New Rows",this.createTableModeText=t.createTableModeText||"Create Table",this.updateTableModeText=t.updateTableModeText||"Add New Rows"}show(){this.popup=$("<div />").appendTo(this.$container).dxPopup({showTitle:!0,title:this.title,visible:!1,dragEnabled:!1,resizeEnabled:!1,showCloseButton:!0,hideOnOutsideClick:!1,fullScreen:!0,maxWidth:1300,maxHeight:800,contentTemplate:t=>{let r=$("<div />");this.form=this.createForm(),r.append(this.form.element()),r.dxScrollView({width:"100%",height:"100%"}).appendTo(t)},toolbarItems:[{toolbar:"bottom",widget:"dxButton",location:"after",options:{text:this.getActionButtonText(),type:"success",onInitialized:t=>{this.actionButton=t.component},onClick:async()=>{this.mode===0?this.createTable():this.addRowsToTable()}}},{toolbar:"bottom",widget:"dxButton",location:"after",options:{text:"Cancel",onClick:()=>this.popup.hide()}}]}).dxPopup("instance"),this.popup.show(),this.onModeSwitching()}dispose(){this.popup&&this.popup.dispose()}createForm(){return $("<div>").dxForm({showColonAfterLabel:!0,labelLocation:"top",colCountByScreen:{md:4,sm:1},screenByWidth:r=>r<1256?"sm":"md",items:[{dataField:"Mode",itemType:"simple",template:(r,i)=>{this.createModeSwitcher(i)}},{dataField:"Schema",editorOptions:{disabled:!this.canChangeMode},validationRules:[{type:"required"}]},{dataField:"Table",editorOptions:{disabled:!this.canChangeMode},validationRules:[{type:"required"}]},{dataField:"TableSelector",label:{text:"Table"},editorType:"dxSelectBox",visible:!1,colSpan:2,editorOptions:{dataSource:new DevExpress.data.DataSource({store:Q({loadUrl:this.getTablesListUrl,loadParams:{contextName:"",tablesOnly:!0,isWarehouseContext:!0},loadMethod:"post",notifyError:!1}),paginate:!1,sort:"this"}),searchEnabled:!0},validationRules:[{type:"required"}]},{dataField:"Source File",itemType:"simple",template:(r,i)=>{this.createFilesUploader(i)}},{dataField:"Columns Selector",label:{visible:!1},colSpan:4,itemType:"simple",template:(r,i)=>{this.createDataGrid(i)}}]}).dxForm("instance")}createModeSwitcher(t){$("<div />").dxButtonGroup({items:[{text:this.createTableModeText,icon:"inserttable",value:0},{text:this.updateTableModeText,icon:"insertrowbelow",value:1}],keyExpr:"value",disabled:!this.canChangeMode,stylingMode:"outlined",selectionMode:"single",selectedItemKeys:[this.mode],onItemClick:r=>{this.mode=r.itemData.value,this.onModeSwitching()}}).appendTo(t)}createFilesUploader(t){this.fileUploader=new st({$container:t,cssClass:"table-creator__upload",maxFileSize:10*1e6,acceptedFileTypes:".xls, .xlsx",allowedFileExtensions:[".xls",".xlsx"],selectButtonText:"Select Excel file",onValueChanged:async()=>{this.dataGrid.beginCustomLoading("Parsing selected file..."),this.fileUploader.upload(this.fileUploadUrl).then(r=>{if(r){this.setRowsCount(r.RowsCount);let i=new DevExpress.data.DataSource({store:{type:"array",key:"Id",data:r.Columns},paginate:!1});this.dataGrid.option("dataSource",i)}}).catch(r=>{U(`Parsing Error : ${r}`,!1)}).finally(()=>{this.dataGrid.endCustomLoading()})}}),this.fileUploader.render()}createDataGrid(t){let r={noDataText:"Select Excel File",hoverStateEnabled:!0,searchPanel:{visible:!1},groupPanel:{visible:!1},headerFilter:{visible:!1},filterRow:{visible:!1},sorting:{mode:"none"},paging:{pageSize:1e4,enabled:!1},editing:{allowUpdating:!0,mode:"cell"},selection:{mode:"none"},columns:[{dataField:"Id",visible:!1},{dataField:"Selected",dataType:"boolean",visible:this.mode===0},{dataField:"IsKeyColumn",dataType:"boolean",visible:this.mode===0},{dataField:"Name",caption:"Column Name"},{dataField:"Type",allowEditing:!1},{dataField:"IsNullable",allowEditing:this.mode===0&&this.canChangeMode,setCellValue:(i,n)=>{i.IsNullable=n,n&&(i.IsKeyColumn=!1)}}],remoteOperations:!1,onToolbarPreparing:i=>{i.toolbarOptions.items.push({template:()=>$("<div>").append($("<span>").addClass("table-creator__table-header").text("Parsed File Metadata")),location:"before"},{template:()=>(this.rowsCounter=$("<span>").text("1000"),this.rowsCounterContainer=$("<div>").append($("<span>").text("Rows Count: "),this.rowsCounter).hide(),this.rowsCounterContainer),location:"after"})},onEditorPreparing:i=>{if(i.parentType==="dataRow"&&i.dataField==="IsKeyColumn"){let n=i.editorOptions;n.disabled=i.row.data.IsNullable}}};this.dataGrid=G($("<div />"),{options:r,summaryColumn:"Name",isFullScreen:!1,setDefaultColumnWidth:!1}),t.append(this.dataGrid.element())}createTable(){if(this.form.validate().isValid){let r=this.dataGrid.getDataSource();r||U("Select file with data",!1);let i=r.items();if(!this.areColumnsValid(i))U("At least 1 key column must be set",!1);else{let n={schema:this.form.option("formData").Schema,table:this.form.option("formData").Table,columns:JSON.stringify(i)};this.dataGrid.beginCustomLoading("Creating and filling DB table..."),this.fileUploader.upload(this.createTableUrl,n).then(s=>{s===!0?(this.popup.hide(),U(`The table [${n.schema}].[${n.table}] has been created`,!0),this.emit(_t.TABLE_UPDATED_EVENT)):U("The table has not been created",!1)}).catch(s=>{U(`Table creating error: ${s}`,!1)}).finally(()=>{this.dataGrid.endCustomLoading()})}}}addRowsToTable(){if(this.form.validate().isValid){let r=this.dataGrid.getDataSource();r||U("Select file with data",!1);let i=r.items(),n={table:this.form.option("formData").TableSelector,columns:JSON.stringify(i)};this.dataGrid.beginCustomLoading("Adding rows to DB table..."),this.fileUploader.upload(this.addRowsUrl,n).then(s=>{s===!0?(this.popup.hide(),U(`The table ${n.table} has been updated`,!0),this.emit(_t.TABLE_UPDATED_EVENT)):U("The table has not been updated",!1)}).catch(s=>{U(`Table updating error: ${s}`,!1)}).finally(()=>{this.dataGrid.endCustomLoading()})}}onModeSwitching(){let t=this.mode===0;this.actionButton.option("text",this.getActionButtonText()),this.dataGrid.columnOption("IsKeyColumn","visible",t),this.dataGrid.columnOption("IsNullable","visible",t),this.canChangeMode?(this.form.itemOption("Schema","visible",t),this.form.itemOption("Table","visible",t),this.form.itemOption("TableSelector","visible",!t)):(this.form.itemOption("Schema","visible",!0),this.form.updateData("Schema",this.predefinedTable.schema),this.form.itemOption("Table","visible",!0),this.form.updateData("Table",this.predefinedTable.table),this.form.itemOption("TableSelector","visible",!1))}getActionButtonText(){return this.mode===0?this.createTableButtonText:this.updateTableButtonText}areColumnsValid(t){return t.filter(r=>r.Selected).some(r=>r.IsKeyColumn)}setRowsCount(t){this.rowsCounterContainer.show(),this.rowsCounter.text(t)}},De=_t;De.TABLE_UPDATED_EVENT="file-importer-table-updated-event";var mo=class{constructor(t){this.onGridToolbarPreparing=t=>{let r=t.toolbarOptions&&t.toolbarOptions.items;if(!r)return;let i=[this.displaysToolbarItem];this.importFileOptions&&this.importFileOptions.mode!==0&&i.push(this.importFileToolbarItem),r.splice(1,0,...i)};this.options=t,this.gridDisplaysManager=t.gridDisplaysManager,this.gridViewsManager=t.gridViewsManager,this.gridFiltersManager=t.gridFiltersManager,this.importFileOptions=t.importFileOptions,this.gridDisplaysManager.onDisplaisLoaded=r=>{let i=new DevExpress.data.ArrayStore({key:"Id",data:r});this.displaysDropdownBox&&this.displaysDropdownBox.option("dataSource",i),this.dataGrid&&this.dataGrid.option("dataSource",i),this.dataGrid&&this.dataGrid.endCustomLoading()},this.gridDisplaysManager.onDisplayChanged=r=>{this.displaysDropdownBox&&this.displaysDropdownBox.option("value",r?r.Id:null),this.currentDisplayTitle&&this.currentDisplayTitle.option("value",r?r.Name:null),this.currentDisplayTitle&&this.currentDisplayTitle.option("disabled",!r),this.saveAsButton&&this.saveAsButton.option("disabled",!r),this.saveButton&&this.saveButton.option("disabled",!r),this.dataGrid&&(r?this.dataGrid.selectRows([r.Id],!1):this.dataGrid.deselectAll())},this.integrateToGrid(this.options.owner)}integrateToGrid(t){let r=t.option("onToolbarPreparing");t.option("onToolbarPreparing",i=>{r&&r(i),this.onGridToolbarPreparing(i)})}createDataGrid(t){return $("<div />").dxDataGrid({dataSource:t.getDataSource(),remoteOperations:!1,editing:{allowAdding:!1,allowUpdating:!1,allowDeleting:this.options.editMode,mode:"row",useIcons:!0,texts:{confirmDeleteMessage:"Are you sure you want to delete this display?"}},loadPanel:{shading:!0},allowColumnResizing:!0,columnAutoWidth:!0,wordWrapEnabled:!0,columns:[{dataField:"Name",caption:"Display"},{dataField:"FilterId",caption:"Data Set",lookup:{valueExpr:"id",displayExpr:"name"}},{dataField:"ViewId",caption:"View",lookup:{valueExpr:"id",displayExpr:"name"}}],keyboardNavigation:{editOnKeyPress:!1,enabled:!1},showColumnHeaders:!0,hoverStateEnabled:!0,focusedRowEnabled:!1,showBorders:!1,height:this.options.editMode?"calc(100% - 51px)":"100%",scrolling:{mode:"standard"},paging:{enabled:!1},noDataText:"No displays",onInitialized:async r=>{let i=await this.gridFiltersManager.getFilters(),n=await this.gridViewsManager.getViews();r.component.columnOption("FilterId","lookup.dataSource",i),r.component.columnOption("ViewId","lookup.dataSource",n)},onCellClick:async r=>{r.rowType==="data"&&t.option("value",r.data.Id)},onRowRemoving:async r=>{this.dataGrid.beginCustomLoading("Loading"),await this.gridDisplaysManager.deleteDisplay(r.key)}}).dxDataGrid("instance")}createDisplaysToolbarItem(){let t={valueExpr:"Id",displayExpr:"Name",showClearButton:!0,placeholder:"None",width:200,onInitialized:i=>{this.displaysDropdownBox=i.component,this.gridDisplaysManager.getDisplays()},onValueChanged:async i=>{let n=this.gridDisplaysManager.currentDisplay,s=n&&n.FilterId!==this.gridFiltersManager.currentFilterId,l=n&&n.ViewId!==this.gridViewsManager.currentViewId;await(s||l?this.confirmChangesLoss():Promise.resolve(!0))&&(this.gridDisplaysManager.currentDisplayId=i.value)}},r={elementAttr:{class:"iszolea-md"},dropDownOptions:{width:800},contentTemplate:this.options.editMode?i=>{this.dataGrid=this.createDataGrid(i.component),this.currentDisplayTitle=this.createCurrentDisplayTitle(i.component),this.saveButton=this.createSaveViewButton(),this.saveAsButton=this.createSaveViewAsButton();let n=$("<div />").addClass("aps-displays__header").append(this.currentDisplayTitle.element()).append(this.saveButton.element()).append(this.saveAsButton.element()),s=$("<div />").height("100%");return this.options.editMode&&s.append(n),s.append(this.dataGrid.element()),s}:void 0,onOpened:()=>{this.saveAsButton&&this.saveAsButton.option("disabled",!this.gridFiltersManager.currentFilterId),this.saveButton&&this.saveButton.option("disabled",!this.gridDisplaysManager.currentDisplay)}};return{widget:this.options.editMode?"dxDropDownBox":"dxSelectBox",location:"after",text:"Displays",cssClass:"aps-displays__toolbar-item",options:this.options.editMode?$.extend(t,r):t}}createImportFileToolbarItem(){return{location:"after",widget:"dxButton",options:{icon:"upload",hint:"Import file",height:30,stylingMode:"text",onClick:()=>{this.fileImporter&&this.fileImporter.dispose(),this.fileImporter=new De({$container:this.options.owner.element().parent(),title:"Import File to CDM",createTableUrl:this.importFileOptions.createTableUrl,addRowsUrl:this.importFileOptions.addRowsUrl,fileUploadUrl:this.importFileOptions.fileUploadUrl,predefinedImportFileMode:this.getPredefinedImportFileMode(this.importFileOptions.mode),predefinedTable:this.importFileOptions.predefinedTable,createTableButtonText:"Replace All Rows",createTableModeText:"Replace Rows"}),this.fileImporter.on(De.TABLE_UPDATED_EVENT,()=>this.options.owner.refresh()),this.fileImporter.show()},onContentReady:t=>{t.element.find(".dx-button-content").css({paddingTop:5,paddingBottom:5})}}}}getPredefinedImportFileMode(t){switch(t){case 1:return 1;case 2:return 0;default:throw new Error("Unsupported mode")}}createCurrentDisplayTitle(t){return $("<div />").addClass("aps-displays__current-display iszolea-md").dxTextBox({value:t.option("text")||t.option("placeholder"),disabled:!this.gridDisplaysManager.currentDisplay}).dxTextBox("instance")}createSaveViewButton(){return $("<button />").addClass("aps-displays__save-display iszolea-md").dxButton({text:"Save",type:"normal",disabled:!this.gridDisplaysManager.currentDisplay,onClick:()=>{this.dataGrid.beginCustomLoading("Loading"),this.gridDisplaysManager.updateCurrentDisplay(this.currentDisplayTitle.option("value"),this.gridFiltersManager.currentFilterId,this.gridViewsManager.currentViewId)},icon:"save",width:125}).dxButton("instance")}createSaveViewAsButton(){return $("<button />").addClass("aps-display__save-display-as iszolea-md").dxButton({text:"Save As",type:"normal",disabled:!this.gridFiltersManager.currentFilterId,onClick:()=>this.createSaveAsDialog(),icon:"save",width:160}).dxButton("instance")}createSaveAsDialog(){let t=$("<div />"),r=$('<div style="margin-bottom:8px;" />').dxTextBox({placeholder:"Display Name",showClearButton:!0}).dxValidator({validationRules:[{type:"required"}]}),i=r.dxTextBox("instance"),n=r.dxValidator("instance");return i.element().appendTo(t),K({title:"Create New Display",height:"auto",width:"100%",maxWidth:"300px"},t,{text:"Ok",onClick:async s=>{!n.validate().isValid||(this.dataGrid.beginCustomLoading("Loading"),this.gridDisplaysManager.createNewDisplay(i.option("value"),this.gridFiltersManager.currentFilterId,this.gridViewsManager.currentViewId),s())}},{text:"Cancel",onClick:s=>s()})}async confirmChangesLoss(){return DevExpress.ui.dialog.confirm("You have unsaved changes that will be lost if you close this popup. Do you want to close the popup and not save changes?","Unsaved changes")}get displaysToolbarItem(){return this._displaysToolbarItem||(this._displaysToolbarItem=this.createDisplaysToolbarItem()),this._displaysToolbarItem}get importFileToolbarItem(){return this._importFileToolbarItem||(this._importFileToolbarItem=this.createImportFileToolbarItem()),this._importFileToolbarItem}};var fo=class{constructor(t){this._currentDisplayId=0;this.getDisplayById=t=>!t||!this.displays?null:this.displays.find(r=>r.Id===t);this.loadDataUrl=t.loadDataUrl,this.insertDataUrl=t.insertDataUrl,this.updateDataUrl=t.updateDataUrl,this.deleteDataUrl=t.deleteDataUrl,this.eventHandlers={changed:[],loaded:[]}}async loadDisplays(){return this.displays=await se(this.loadDataUrl),this.onDisplaisLoadedPrivate(),this.displays}async getDisplays(){return this.displays||await this.loadDisplays()}async createNewDisplay(t,r,i){let n={Id:0,Name:t,FilterId:r,ViewId:i};await x(this.insertDataUrl,"POST",n),await this.loadDisplays()}async deleteDisplay(t){await x(this.deleteDataUrl,"DELETE",{id:t}),await this.loadDisplays()}updateCurrentDisplay(t,r,i){return this.updateDisplay(this.currentDisplay.Id,t,r,i)}async updateDisplay(t,r,i,n){await x(this.updateDataUrl,"PUT",{id:t,name:r,filterId:i,viewId:n}),await this.loadDisplays()}onDisplayChangedPrivate(){this.eventHandlers.changed.forEach(t=>t(this.currentDisplay))}onDisplaisLoadedPrivate(){this.eventHandlers.loaded.forEach(t=>t(this.displays))}get currentDisplayId(){return this._currentDisplayId}set currentDisplayId(t){this._currentDisplayId=t,this.onDisplayChangedPrivate()}get currentDisplay(){return this.getDisplayById(this._currentDisplayId)}set onDisplayChanged(t){this.eventHandlers.changed.push(t)}set onDisplaisLoaded(t){this.eventHandlers.loaded.push(t)}};var yo=class{constructor(t){this.onGridEditorPreparing=t=>{if(!t.component||!t.editorOptions||t.parentType!=="dataRow"||!t.dataField||!t.row||!t.row.key)return;let r=t.dataField,i=t.row.key,n=t.editorOptions.onValueChanged;t.editorOptions.onValueChanged=s=>{n(s),this.updateMultipleRows(r,i,s.value)}};this.options=O(A({},t),{autoIntegration:t.autoIntegration!==void 0&&t.autoIntegration!==null?t.autoIntegration:!0}),this.options.autoIntegration&&this.integrateToGrid(this.options.owner)}integrateToGrid(t){t.option("selection",{mode:"multiple"}),t.on("editorPreparing",this.onGridEditorPreparing)}async updateMultipleRows(t,r,i){let n=await this.options.owner.getSelectedRowKeys();if(!n.length)return;let s=n.findIndex(l=>l===r);s<0||n.length===1||(n.splice(s,1),n.forEach(l=>{this.options.owner.cellValue(this.options.owner.getRowIndexByKey(l),t,i)}))}};var vo=class{constructor(t){this.defaultUserSettings={defaultFilterId:void 0,defaultViewId:k.defaultControlDisplayView.id};this.isLatestLoadedUserSettingsExpired=!0;this.options=A({},t),this.options.loadedUserSettings&&(this.latestLoadedUserSettings=this.options.loadedUserSettings),this.startAutoCacheResettingTimer()}get latestLoadedUserSettings(){return this._latestLoadedUserSettings}set latestLoadedUserSettings(t){this._latestLoadedUserSettings=t,this.isLatestLoadedUserSettingsExpired=!1}async getUserSettings(){if(!this.isLatestLoadedUserSettingsExpired)return this.latestLoadedUserSettings;try{this.latestLoadedUserSettings=await this.loadUserSettings()}catch(t){console.error(t)}return this.latestLoadedUserSettings}async updateUserSettings(t){try{this.latestLoadedUserSettings=await this.updateUserSettingsInternal(t)}catch(r){console.error(r)}return this.latestLoadedUserSettings}startAutoCacheResettingTimer(){this.autoResettingCacheTimerId=window.setInterval(()=>{this.isLatestLoadedUserSettingsExpired=!0},5e3)}stopAutoCacheResettingTimer(){window.clearInterval(this.autoResettingCacheTimerId)}},Dt=class extends vo{async loadUserSettings(){let t=localStorage.getItem(Dt.userSettingsStorageKey);return t?JSON.parse(t):this.defaultUserSettings}async updateUserSettingsInternal(t){let r=await this.getUserSettings(),i=A(A({},r),t);return localStorage.setItem(Dt.userSettingsStorageKey,JSON.stringify(i)),i}},yr=Dt;yr.userSettingsStorageKey="aps:control-display:user-settings";var So=class extends vo{constructor(t){super(t);this.loadDataUrl=t.loadDataUrl,this.updateDataUrl=t.updateDataUrl}async loadUserSettings(){let t=await se(this.loadDataUrl);return t?this.mapControlDisplayUserSettingsDtoToModel(t):this.defaultUserSettings}async updateUserSettingsInternal(t){let r=await this.getUserSettings(),i=A(A({},r),t),n=await x(this.updateDataUrl,"PUT",this.mapControlDisplayUserSettingsModelToDto(i));return this.mapControlDisplayUserSettingsDtoToModel(n)}mapControlDisplayUserSettingsModelToDto(t){return{DefaultFilterId:t.defaultFilterId,DefaultViewId:t.defaultViewId}}mapControlDisplayUserSettingsDtoToModel(t){return{defaultFilterId:t.DefaultFilterId,defaultViewId:t.DefaultViewId}}};function vr(o){let t="",r=o.filter(n=>n.visible),i=r.filter(n=>n.visibleIndex!==null&&n.visibleIndex!==void 0);return i.length?t=i.sort((n,s)=>n.visibleIndex-s.visibleIndex)[0].dataField:t=r[0]&&r[0].dataField||"",t}var at=class{constructor(t){this.onViewApplied=t=>{this.clearFilterRowAfterViewSwitching()};this.$container=t.$container,this.isStandalonePage=t.isStandalonePage,this.pageTitle=t.pageTitle,this.exportFileName=t.exportFileName,this.userName=t.userName,this.userConfigUrl=t.userConfigUrl,this.controlLogsUrl=t.controlLogsUrl,this.loadDataUrl=t.loadDataUrl,this.updateDataUrl=t.updateDataUrl,this.uploadDocumentUrl=t.uploadDocumentUrl,this.downloadDocumentUrl=t.downloadDocumentUrl,this.gridFiltersManagerOptions=t.gridFiltersManagerOptions,this.gridViewsManagerOptions=t.gridViewsManagerOptions,this.gridDisplaysManagerOptions=t.gridDisplaysManagerOptions,this.remoteControlDisplayUserSettingsManagerLoadOptions=t.remoteControlDisplayUserSettingsManagerLoadOptions,this.importFileOptions=t.importFileOptions,this.disableGlobalSearch=!!t.disableGlobalSearch,this.imageManager=new Ve,this.imageManager.onUploaded(async r=>{let i=this.imageManager.images.length;this.imageManager.images=await this.uploadAndUpdateDocuments(r,1),this.imageManager.selectedIndex=i}),this.imageManager.onDeleted(r=>{this.imageManager.images=this.deleteDocumentHandler(r)}),this.documentManager=new Ge({width:400,height:600}),this.documentManager.onUploaded(async r=>{this.documentManager.documents=await this.uploadAndUpdateDocuments(r,2)}),this.documentManager.onDeleted(r=>{this.documentManager.documents=this.deleteDocumentHandler(r)}),this.documentManager.onDownload(r=>{window.open(`${this.downloadDocumentUrl}?name=${r}`,"_blank")}),this.imageGallery=new ke,this.$container.addClass(["aps-grid","control-display-grid"]),this.loadPanel=$("<div />").dxLoadPanel({message:"Uploading..."}).dxLoadPanel("instance"),$(document.body).append(this.loadPanel.element())}showLoader(t="Uploading..."){this.loadPanel.option("message",t),this.loadPanel.show()}hideLoader(){this.loadPanel.hide()}render(){x(this.userConfigUrl).then(t=>{let r=new nt(this.gridFiltersManagerOptions),i=new k(this.gridViewsManagerOptions),n=new fo(this.gridDisplaysManagerOptions);this.mainGrid=this.createMainGrid(t.FieldsConfiguration);let s=t.CanCreateDisplays&&t.CanCreateViews&&t.CanCreateFilters;(s||t.CanApplayDisplays)&&(this.gridDisplaysToolbarComponent=new mo({owner:this.mainGrid,editMode:s,gridFiltersManager:r,gridViewsManager:i,gridDisplaysManager:n,importFileOptions:this.importFileOptions})),this.gridViewsToolbarComponent=new co({owner:this.mainGrid,onViewApplied:this.onViewApplied,onViewDeleted:async()=>{await n.loadDisplays()},autoIntegration:!0,gridViewsManager:i,canCreateGlobalViews:t.CanCreateGlobalViews,visible:t.CanCreateViews}),this.gridFiltersToolbarComponent=new ho({apsControlDisplayUserSettingsManager:new So({userId:this.userName,loadDataUrl:this.remoteControlDisplayUserSettingsManagerLoadOptions.loadDataUrl,updateDataUrl:this.remoteControlDisplayUserSettingsManagerLoadOptions.updateDataUrl}),owner:this.mainGrid,onFilterDeleted:async l=>{await n.loadDisplays()},autoIntegration:!0,gridFiltersManager:r,canCreateGlobalFilters:t.CanCreateGlobalFilters,visible:t.CanCreateFilters}),this.multipleEditingDataGridPlugin=new yo({owner:this.mainGrid}),n.onDisplayChanged=async l=>{l?(await this.gridFiltersToolbarComponent.applyFilter(l.FilterId,!0),await this.gridViewsToolbarComponent.applyView(l.ViewId)):(this.gridFiltersToolbarComponent.applyFilter(void 0,!0),await this.gridViewsToolbarComponent.applyView(k.defaultControlDisplayView.id))}})}async uploadAndUpdateDocuments(t,r){let i=[];try{this.showLoader("Uploading...");let n=new FormData;n.append("type",r.toString());for(let g of t)n.append("files",g);let l=await(await fetch(this.uploadDocumentUrl,{method:"POST",body:n})).json();if(l.RequestState===1){let g=this.mainGrid.cellValue(this.activeDocumentCellInfo.rowIndex,this.activeDocumentCellInfo.field),p=ae(g)?JSON.parse(g):[],y=l.Data;p.push(...y),this.mainGrid.cellValue(this.activeDocumentCellInfo.rowIndex,this.activeDocumentCellInfo.field,JSON.stringify(p)),i=p}else U(l.Message,!1)}catch{U("Error",!1)}finally{this.hideLoader()}return i}deleteDocumentHandler(t){let r=this.mainGrid.cellValue(this.activeDocumentCellInfo.rowIndex,this.activeDocumentCellInfo.field),n=(ae(r)?JSON.parse(r):[]).filter(s=>s.Id!==t);return this.mainGrid.cellValue(this.activeDocumentCellInfo.rowIndex,this.activeDocumentCellInfo.field,n.length?JSON.stringify(n):null),n}hasPermisson(t,r){return t&r}buildTree(t){let r="__GROUP__",i=t.reduce((s,l)=>(l.Columns=[],l.GroupField=l.GroupField?`${r}${l.GroupField}`:null,s[l.Name]=l,s),{});i=t.filter(s=>s.GroupField).map(s=>s.GroupField).filter((s,l,g)=>g.indexOf(s)===l).reduce((s,l)=>{let g=l.replace(r,""),p={Name:l,Label:g,Columns:[],GroupField:i[g]&&i[g].GroupField&&i[g].GroupField!==l?i[g].GroupField:null};return s[l]=p,s},i);let n=[];for(let s in i)if(i.hasOwnProperty(s)){let l=i[s];l.GroupField?i[l.GroupField].Columns.push(l):n.push(l)}return n}renderDisplayType(t,r,i){t.type===1&&(r.cellTemplate=(n,s)=>{let l=String(s.value),g=t.data.find(p=>String(p.value)===l);g?$("<div>").css({"text-align":"center"}).attr("title",g.title).append($("<img>",{src:g.image})).appendTo(n):$("<div />").css({"text-align":"center"}).text(s.value).appendTo(n)},r.editCellTemplate=(n,s)=>{$("<div />").dxSelectBox({dataSource:t.data,displayValue:"title",itemTemplate:l=>$("<div />").css({"text-align":"center"}).attr("title",l.title).append($("<img>",{src:l.image})).appendTo(n),fieldTemplate:(l,g)=>{let p=t.data.find(T=>parseInt(T.value)===s.value),y=$("<div />").addClass("item-name"),m=$("<div />").addClass("aps-icon-editor__custom-item").append($("<img>",{src:p?p.image:""}).attr("title",p?p.title:"")).append(y);y.dxTextBox({value:"",readOnly:!0}),g.append(m)},onValueChanged:({value:l,component:g})=>{s.setValue(parseInt(l.value)),g.blur()},value:s.value!==null&&s!==void 0&&s.value.toString(),selectedItem:t.data.find(l=>parseInt(l.value)===s.value)}).appendTo(n)},r.allowSearch=!1,r.allowFiltering=!1,r.allowHeaderFiltering=!0,r.allowGrouping=!1),t.type===2&&(r.editCellTemplate=(n,s)=>{$("<div />").dxSelectBox({dataSource:t.data.map(l=>l.value).sort(),acceptCustomValue:!0,showClearButton:!0,onValueChanged:({value:l,component:g})=>{s.setValue(l||""),g.blur()},value:s.value}).appendTo(n)}),t.type===3&&(r.editCellTemplate=(n,s)=>{$("<div />").dxCheckBox({value:s.value||!1,readOnly:!this.hasPermisson(i,4),onValueChanged:l=>{s.component.cellValue(s.rowIndex,s.column.dataField,l.value)}}).appendTo(n)}),t.type===4&&(r.cellTemplate=(n,s)=>{let l=s.value,g=t.data,y=(typeof g.useStaticLink>"u"?!0:g.useStaticLink)?g.url:l;if(y){let m=g.text||l||g.url,T=$(`<a href="${y}">${m}</a>`);g.openNewTab&&T.attr("target","_blank"),T.appendTo(n)}}),t.type===5&&(r.cellTemplate=(n,s)=>{let l=new Intl.NumberFormat("en-US",{style:"currency",currency:"USD"});n.append(l.format(s.value))}),t.type===7&&(r.alignment="center",r.allowEditing=!1,r.cellTemplate=(n,s)=>{let l=this.hasPermisson(i,4),g=ae(s.value)?JSON.parse(s.value):[],p=$('<i class="fa-solid fa-image" style="font-size: 19px; cursor: pointer;"></i>');p.on("click",()=>{this.activeDocumentCellInfo={rowIndex:s.rowIndex,field:r.dataField},this.imageManager.open(g,!l)}),n.append(p),g.length&&p.css("color","#4cae4c")}),t.type===6&&(r.alignment="center",r.allowEditing=!1,r.cellTemplate=(n,s)=>{let l=this.hasPermisson(i,4),g=ae(s.value)?JSON.parse(s.value):[],p=$('<i class="fa-solid fa-file" style="font-size: 19px; cursor: pointer;"></i>');p.on("click",()=>{this.activeDocumentCellInfo={rowIndex:s.rowIndex,field:r.dataField},this.documentManager.open(g,!l)}),n.append(p),g.length&&p.css("color","#4cae4c")})}configureColumn(t){let r=t.Label||t.Name,i=t.ToolTip||r,n=t.Columns.length?{caption:r,columns:t.Columns.map(s=>this.configureColumn(s))}:{dataField:t.Name,dataType:t.Type,caption:r,headerCellTemplate:de(r,i),visible:t.IsDefaultViewField,visibleIndex:t.Order,allowFixing:!1,allowEditing:!!this.hasPermisson(t.Permissions,4),width:t.Width,hidingPriority:t.HidingOrder};if(t.DisplayType){let s=JSON.parse(t.DisplayType);if(s.type===1){let l=s.data.map(g=>({text:g.title,value:g.value}));l.splice(0,0,{text:"Blank",value:null}),n.headerFilter={dataSource:l}}this.renderDisplayType(s,n,t.Permissions)}return n}configureColumns(t){return t=t.filter(i=>this.hasPermisson(i.Permissions,1)),t=this.buildTree(t),t.map(i=>this.configureColumn(i))}createMainGrid(t){let r=t.some(l=>l.IsKeyColumn),i=this.configureColumns(t),n=vr(i),s={dataSource:this.createMainGridDataSource(t),columnResizingMode:"widget",width:"100%",editing:{allowUpdating:r,allowAdding:!1,allowDeleting:!1,mode:"batch"},searchPanel:{visible:!this.disableGlobalSearch},scrolling:{mode:"virtual",preloadEnabled:!0},remoteOperations:!0,pager:{visible:!1},height:this.isStandalonePage?void 0:"100%",columnChooser:{enabled:!0,mode:"dragAndDrop"},columnFixing:{enabled:!0},filterPanel:{visible:!0,texts:{createFilter:"None"}},summary:{totalItems:[{summaryType:"count",column:n}]},allowColumnResizing:!0,columnHidingEnabled:!1,hoverStateEnabled:!0,columns:i,allowColumnReordering:!0,grouping:{contextMenuEnabled:!0},groupPanel:{visible:!0},masterDetail:r?{enabled:!0,template:(l,g)=>{let p={};t.filter(y=>y.IsKeyColumn).forEach(y=>p[y.Name]=g.data[y.Name]),$("<div>").dxDataGrid({dataSource:{store:Q({loadUrl:`${this.controlLogsUrl}?key=${JSON.stringify(p)}`})},showBorders:!0,columns:[{dataField:"User",width:200},{dataField:"CreatedAt",caption:"Date",dataType:"date",format:"shortDateShortTime",width:200},{dataField:"Changes",cellTemplate:(y,m)=>{let T=m.data.Changes.map(S=>`<div class='aps-control-log'>
|
|
47
|
+
`);s.push({location:"before",template:()=>_})}},onEditorPreparing:n=>{n.parentType==="dataRow"&&(n.dataField==="Name"||n.dataField==="Type")&&(n.editorOptions.disabled=!n.row.isNewRow)},onInitNewRow:n=>{n.data={IsKeyColumn:!1,IsDefaultViewField:!0}}},i={summaryColumn:"Name"};return this.isStandalonePage?t=$e(this.$container,r,i,this.pageTitle,"",!0):t=G(this.$container,{options:r,summaryColumn:i.summaryColumn,title:this.pageTitle,isFullScreen:!1}),t}prepareMainGridColumns(t){return t.forEach(r=>{(r.allowHiding===void 0||r.allowHiding===null)&&(r.allowHiding=!1),(r.showInColumnChooser===void 0||r.showInColumnChooser===null)&&(r.showInColumnChooser=!1)}),t}createMainGridDataSource(){return{store:Q({loadUrl:this.loadDataUrl,updateUrl:this.updateDataUrl,insertUrl:this.addDataUrl,deleteUrl:this.deleteDataUrl,key:"Name"})}}},gr=class{constructor(t,r){this.$container=t,this.data=r||[]}render(){let t={dataSource:this.data,editing:{mode:"row",allowAdding:!0,allowDeleting:!0,allowUpdating:!0,useIcons:!0},headerFilter:{visible:!1},grouping:{contextMenuEnabled:!1},groupPanel:{visible:!1},searchPanel:{visible:!1},filterRow:{visible:!1},remoteOperations:!1,selection:{mode:"none"},columns:[{dataField:"value",allowEditing:!0},{dataField:"title",allowEditing:!0},{dataField:"image",allowEditing:!0,cellTemplate:(i,n)=>{$("<div>").css({"text-align":"center"}).append($("<img>",{src:n.data.image})).appendTo(i)},editCellTemplate:(i,n)=>{let s=n.value||"",l=$('<div style="position: relative; display: flex; align-items: center; justify-content: center;" />'),g=$(`<img src="${s}" />`),p=$('<a class="dx-link dx-icon-upload" style="position: absolute; right: 8px; text-decoration: none; font-size: 18px;" />'),y=$('<input type="file" style="display:none;" />');return p.on("click",()=>{y.click()}),y.on("change",m=>{if(m.target.files.length){let T=new FileReader;T.onloadend=()=>{g.attr("src",T.result),n.setValue(T.result)};let S=m.target.files[0];S?T.readAsDataURL(S):g.attr("src","")}}),g.appendTo(l),p.appendTo(l),y.appendTo(l),l}},{type:"buttons",width:100,buttons:["edit",{hint:"Delete",icon:"trash",onClick:i=>{let n=this.grid.option("dataSource");n.splice(i.row.rowIndex,1),this.grid.option("dataSource",n)}}]}]},r=$("<div />").appendTo(this.$container);this.grid=G(r,{options:t,isFullScreen:!1})}getData(){return this.grid.option("dataSource")}},pr=class{constructor(t,r){this.$container=t,this.data=r||[]}render(){let t={dataSource:this.data,editing:{mode:"row",allowAdding:!0,allowDeleting:!0,allowUpdating:!0,useIcons:!0},headerFilter:{visible:!1},grouping:{contextMenuEnabled:!1},groupPanel:{visible:!1},searchPanel:{visible:!1},filterRow:{visible:!1},remoteOperations:!1,selection:{mode:"none"},columns:[{dataField:"value",allowEditing:!0},{type:"buttons",width:100,buttons:["edit",{hint:"Delete",icon:"trash",onClick:i=>{let n=this.grid.option("dataSource");n.splice(i.row.rowIndex,1),this.grid.option("dataSource",n)}}]}]},r=$("<div />").appendTo(this.$container);this.grid=G(r,{options:t,isFullScreen:!1})}getData(){return this.grid.option("dataSource")}},ur=class{constructor(t,r,i){this.$container=t,this.data=r,this.initData=i}render(){this.form=$("<div />").dxForm({formData:this.data,labelLocation:"top",items:[{dataField:"actionType",validationRules:[{type:"required"}]},{dataField:"fields",validationRules:[{type:"required"},{type:"custom",validationCallback:t=>t.value.length>0,message:"Required"}],editorType:"dxTagBox",editorOptions:{dataSource:this.initData.fields,displayExpr:"Text",valueExpr:"Value",searchEnabled:!0}}]}).appendTo(this.$container).dxForm("instance")}getData(){if(!this.form.validate().isValid)return;let r=this.form.getEditor("actionType").option("value"),i=this.form.getEditor("fields").option("value");return{actionType:r,fields:i}}},cr=class{constructor(t,r){this.$container=t,this.data={url:typeof(r==null?void 0:r.url)>"u"?"":r.url,text:typeof(r==null?void 0:r.text)>"u"?"":r.text,openNewTab:typeof(r==null?void 0:r.openNewTab)>"u"?!0:r.openNewTab,useStaticLink:r?typeof r.useStaticLink>"u"?!0:r.useStaticLink:!1}}render(){this.form=$("<div />").dxForm({formData:this.data,labelLocation:"top",items:[{dataField:"useStaticLink",editorType:"dxCheckBox",editorOptions:{onValueChanged:t=>{this.form.itemOption("url","visible",t.value)}}},{visible:this.data.useStaticLink,dataField:"url",validationRules:[{type:"required"}]},{dataField:"text",label:{text:"Text (optional)"}},{dataField:"openNewTab",label:{text:"Open in a new tab"},editorType:"dxCheckBox"}]}).appendTo(this.$container).dxForm("instance")}getData(){var l;if(!this.form.validate().isValid)return;let r=(l=this.form.getEditor("url"))==null?void 0:l.option("value"),i=this.form.getEditor("text").option("value"),n=this.form.getEditor("openNewTab").option("value"),s=this.form.getEditor("useStaticLink").option("value");return{url:r,text:i,openNewTab:n,useStaticLink:s}}},hr=class{constructor(t){this.$container=t}render(){}getData(){return{}}},mr=class{constructor(t,r){this.$container=t,this.data={multiple:(r==null?void 0:r.multiple)||!1}}render(){this.form=$("<div />").dxForm({formData:this.data,labelLocation:"top",items:[{dataField:"multiple",editorType:"dxCheckBox",visible:!1}]}).appendTo(this.$container).dxForm("instance")}getData(){return this.form.option("formData")}},fr=class{constructor(t,r){this.$container=t,this.data={multiple:(r==null?void 0:r.multiple)||!1,showPreview:(r==null?void 0:r.showPreview)||!1}}render(){this.form=$("<div />").dxForm({formData:this.data,labelLocation:"top",items:[{dataField:"multiple",editorType:"dxCheckBox",visible:!1},{dataField:"showPreview",editorType:"dxCheckBox",visible:!1}]}).appendTo(this.$container).dxForm("instance")}getData(){return this.form.option("formData")}};DevExpress.ui.dxDataGrid.registerModule("columnChooserSorting",{extenders:{controllers:{columns:{getChooserColumns(o){return this.callBase(o).sort((r,i)=>{let n=(r==null?void 0:r.caption)||"",s=(i==null?void 0:i.caption)||"";return n.localeCompare(s)})}}}}});var Li=(o,t)=>{if(o===null||t===null||o.length!==t.length)return!1;for(let r=0;r<o.length;r++)if(o[r]!==t[r])return!1;return!0},He=o=>{let t=null,r=null;return function(...i){return Li(t,i)||(r=o(...i)),t=i,r}};var he=class{constructor(t){this._currentViewId=he.defaultControlDisplayView.id;this.views=he.defaultViews;this.getViewByIdInternal=t=>this.views&&this.views.find(r=>r.id===t);this.getViewById=He(this.getViewByIdInternal);this.loadDataUrl=t.loadDataUrl,this.insertDataUrl=t.insertDataUrl,this.updateDataUrl=t.updateDataUrl,this.deleteDataUrl=t.deleteDataUrl}get currentView(){return this.getViewById(this._currentViewId)}get currentViewId(){return this._currentViewId}set currentViewId(t){this._currentViewId=t}async getViews(){return this.views===he.defaultViews&&await this.loadViews(),this.views}updateCurrentView(t){return this.updateView(this.currentView.id,t)}async createNewView(t,r,i){let n=this.mapViewModelToDto({id:-1,name:t,gridState:r,isGlobal:i});return n=await x(this.insertDataUrl,"POST",n),await this.loadViews(),this.mapViewDtoToModel(n)}async updateView(t,r){if(t===he.defaultControlDisplayView.id)return!1;let i=this.getViewById(t);if(!i)return!1;let n=A(A({},i),r),s=this.mapViewModelToDto(n);return s=await x(this.updateDataUrl,"PUT",s),await this.loadViews(),!0}async deleteView(t){return t===he.defaultControlDisplayView.id||!this.getViewById(t)?!1:(await x(this.deleteDataUrl,"DELETE",{viewId:t}),await this.loadViews(),!0)}async loadViews(){let t=await se(this.loadDataUrl);return this.views=t.map(r=>this.mapViewDtoToModel(r)),this.views.unshift(he.defaultControlDisplayView),this.resetCachedResultOfGetViewByIdFunction(),this.views}mapViewModelToDto(t){return{Id:t.id,Name:t.name,GridState:JSON.stringify(t.gridState),IsGlobal:t.isGlobal}}mapViewDtoToModel(t){return{id:t.Id,name:t.Name,gridState:JSON.parse(t.GridState),isGlobal:t.IsGlobal}}resetCachedResultOfGetViewByIdFunction(){this.getViewById=He(this.getViewByIdInternal)}},k=he;k.defaultControlDisplayView={id:0,name:"Default",gridState:null,isGlobal:!1},k.defaultViews=[he.defaultControlDisplayView];var uo=class{constructor(t){this.options=t,this.currentSavedGridState=t.initialState,this.options.owner.option("stateStoring",{enabled:!0,type:"custom",customLoad:()=>Promise.resolve(this.currentSavedGridState)})}get hasChanges(){return this.currentSavedGridState!==null&&JSON.stringify(this.currentUnsavedGridState)!==JSON.stringify(this.currentSavedGridState)}get currentUnsavedGridState(){return this.prepareUnsavedGridState(this.options.owner.state())}async apply(t,r=!0){return new Promise((i,n)=>{let s=r?void 0:this.options.owner.filter();this.options.owner.beginUpdate(),this.options.owner.clearFilter("filterValue"),this.options.owner.state(t);let l=this.options.owner.getVisibleColumns().filter(p=>!p.type);l[0]&&l[0].dataField&&this.options.owner.option("summary",{totalItems:[{column:l[0].dataField,summaryType:"count"}]}),s&&this.options.owner.filter(s),this.options.owner.endUpdate();let g=()=>{this.save(),i(),this.options.owner.off("contentReady",g)};this.options.owner.on("contentReady",g)})}save(){this.currentSavedGridState=this.currentUnsavedGridState}reset(){this.options.owner.state(this.currentSavedGridState)}prepareUnsavedGridState(t){if(t.columns){let r=t.columns.filter(n=>n.visible),i=r[r.length-1];i.width=void 0}return t}};var co=class{constructor(t){this.onGridToolbarPreparing=t=>{let r=t.toolbarOptions&&t.toolbarOptions.items;!r||(this.removeDefaultColumnChooserButton(r),r.splice(1,0,this.viewsToolbarItem))};this.options=O(A({},t),{gridStateManager:t.gridStateManager?t.gridStateManager:new uo({owner:t.owner,initialState:null}),gridViewsManager:t.gridViewsManager?t.gridViewsManager:new k(t.gridViewsManagerOptions),autoIntegration:t.autoIntegration!==void 0&&t.autoIntegration!==null?t.autoIntegration:!0}),this.options.autoIntegration&&this.integrateToGrid(this.options.owner)}async tryApplyView(t){let r=await this.confirmChangesLoss();return r&&await this.applyView(t),r}async applyView(t){this.beginViewApplyingLoading(),this.options.gridViewsManager.currentViewId=t,await this.options.gridStateManager.apply(this.options.gridViewsManager.currentView.gridState,!1),this.endViewApplyingLoading(),this.syncUIWithCurrentView(),this.options.onViewApplied&&this.options.onViewApplied(t)}integrateToGrid(t){let r=t.option("onToolbarPreparing");t.option("onToolbarPreparing",i=>{r&&r(i),this.onGridToolbarPreparing(i)})}removeDefaultColumnChooserButton(t){t.splice(t.findIndex(r=>r.name==="columnChooserButton"),1)}get viewsToolbarItem(){return this._viewsToolbarItem||(this._viewsToolbarItem=this.createViewsToolbarItem()),this._viewsToolbarItem}get isDefaultView(){return this.options.gridViewsManager.currentViewId===k.defaultControlDisplayView.id}get hasChanges(){let t=this.options.gridViewsManager.currentView;return this.currentViewTitle?this.currentViewTitle.option("value")!==t.name||this.options.gridStateManager.hasChanges:!1}createViewsToolbarItem(){let t=!0;return{widget:"dxDropDownBox",location:"after",text:"Views",visible:this.options.visible,cssClass:"aps-views__toolbar-item",options:{elementAttr:{class:"iszolea-md"},items:[k.defaultControlDisplayView],value:k.defaultControlDisplayView.id,valueExpr:"id",displayExpr:"name",width:200,dropDownOptions:{width:550},onInitialized:r=>{this.viewsDropdownBox=r.component,this.loadViewDropdownBoxData()},onValueChanged:async r=>{if(r.value===this.options.gridViewsManager.currentViewId||!t){t=!0;return}await this.tryApplyView(r.value)||(t=!1,this.syncUIWithCurrentView(!0))},contentTemplate:r=>{if(!r.component)return;this.viewsDataGrid=this.createViewsDataGrid(r.component),this.currentViewTitle=this.createCurrentViewTitle(r.component),this.saveViewButton=this.createSaveViewButton(),this.saveViewAsButton=this.createSaveViewAsButton(),this.columnChooserButton=this.createColumnChooserButton();let i=$("<div />").addClass("aps-views__header").append(this.currentViewTitle.element()).append(this.saveViewButton.element()).append(this.saveViewAsButton.element()).append(this.columnChooserButton.element());return $("<div />").height("100%").append(i).append(this.viewsDataGrid.element())}}}}createViewsDataGrid(t){return $("<div />").dxDataGrid({dataSource:t.getDataSource(),remoteOperations:!1,editing:{allowAdding:!1,allowUpdating:!0,allowDeleting:!0,mode:"cell",useIcons:!0,texts:{confirmDeleteMessage:"Are you sure you want to delete this view?"}},wordWrapEnabled:!0,loadPanel:{shading:!0},columns:[{dataField:"name",allowEditing:!1},{dataField:"isGlobal",caption:"Is Global",dataType:"boolean",width:70},{type:"buttons",buttons:[{name:"delete",visible:r=>r.row&&r.row.key!==k.defaultControlDisplayView.id}]}],keyboardNavigation:{editOnKeyPress:!1,enabled:!1},showColumnHeaders:!0,hoverStateEnabled:!0,focusedRowEnabled:!1,showBorders:!1,showColumnLines:!1,selection:{mode:"single"},height:"calc(100% - 51px)",scrolling:{mode:"standard"},paging:{enabled:!1},noDataText:"No views",onSelectionChanged:r=>{t.option("value",r.selectedRowKeys&&r.selectedRowKeys.length?r.selectedRowKeys[0]:0)},onEditorPreparing:r=>{if(r.dataField==="isGlobal"){r.editorOptions.disabled=!this.options.canCreateGlobalViews,r.editorOptions.visible=r.row.data.id!==k.defaultControlDisplayView.id;let i=r.editorOptions.onValueChanged;r.editorOptions.onValueChanged=async n=>{r.component.beginCustomLoading("Updating"),await this.options.gridViewsManager.updateView(r.row.data.id,{isGlobal:n.value}),r.component.endCustomLoading(),i(n)}}},onCellPrepared:r=>{if(r.column.type!=="buttons"||!r.data)return;!r.data.isGlobal||r.data.isGlobal&&this.options.canCreateGlobalViews||Array.from(r.cellElement.children()).forEach(n=>{$(n).css({color:"#ddd !important",cursor:"default"}).off("click")})},onRowRemoving:r=>{!r.key||this.deleteView(r.key)}}).dxDataGrid("instance")}createCurrentViewTitle(t){return $("<div />").addClass("aps-views__current-view iszolea-md").dxTextBox({value:t.option("text")||t.option("placeholder"),readOnly:this.isDefaultView}).dxTextBox("instance")}createSaveViewButton(){return $("<button />").addClass("aps-views__save-view iszolea-md").dxButton({text:"Save",type:"normal",disabled:this.isDefaultView,onClick:this.save.bind(this),icon:"save",width:87}).dxButton("instance")}createSaveViewAsButton(){return $("<button />").addClass("aps-views__save-view-as iszolea-md").dxButton({text:"Save As",type:"normal",onClick:this.createSaveAsDialog.bind(this),icon:"save",width:118}).dxButton("instance")}createColumnChooserButton(){return $("<button />").addClass("aps-views__column-chooser iszolea-md").dxButton({onClick:this.openColumnChooser.bind(this),icon:"column-chooser"}).dxButton("instance")}createSaveAsDialog(){let t=$("<div />"),r=$('<div style="margin-bottom:8px;" />').dxTextBox({placeholder:"View Name",showClearButton:!0}).dxValidator({validationRules:[{type:"required"}]}),i=r.dxTextBox("instance"),n=r.dxValidator("instance");i.element().appendTo(t);let s=$('<div style="margin-bottom:16px;" />').dxCheckBox({text:"Global view",disabled:!this.options.canCreateGlobalViews}).dxCheckBox("instance");return s.element().appendTo(t),K({title:"Create New View",height:"auto",width:"100%",maxWidth:"300px"},t,{text:"Ok",onClick:async l=>{!n.validate().isValid||(await this.saveAs(i.option("value"),s.option("value")),l())}},{text:"Cancel",onClick:l=>l()})}openColumnChooser(){this.options.owner.showColumnChooser()}async loadViewDropdownBoxData(){if(!this.viewsDropdownBox)return;let t=await this.options.gridViewsManager.getViews(),r=new DevExpress.data.ArrayStore({key:"id",data:t});this.viewsDropdownBox.option("dataSource",r),this.viewsDropdownBox.option("value",this.options.gridViewsManager.currentViewId),this.viewsDataGrid&&this.viewsDataGrid.option("dataSource",r)}async save(){!this.hasChanges||(this.options.gridStateManager.save(),await this.options.gridViewsManager.updateCurrentView({name:this.currentViewTitle.option("value"),gridState:this.options.gridStateManager.currentSavedGridState}),U("Saved",!0),await this.loadViewDropdownBoxData())}async saveAs(t,r){if(!this.options.gridStateManager)return;this.options.gridStateManager.save();let i=await this.options.gridViewsManager.createNewView(t,this.options.gridStateManager.currentSavedGridState,r);await this.loadViewDropdownBoxData(),await this.applyView(i.id),U("View is created",!0)}async deleteView(t){await this.options.gridViewsManager.deleteView(t),this.options.onViewDeleted&&this.options.onViewDeleted(t),await this.loadViewDropdownBoxData(),this.options.gridViewsManager.currentViewId!==k.defaultControlDisplayView.id&&await this.applyView(k.defaultControlDisplayView.id)}beginViewApplyingLoading(){this.currentViewTitle&&this.currentViewTitle.option("readOnly",!0),this.saveViewButton&&this.saveViewButton.option("disabled",!0),this.saveViewAsButton&&this.saveViewAsButton.option("disabled",!0),this.viewsDataGrid&&this.viewsDataGrid.beginCustomLoading("Applying...")}endViewApplyingLoading(){this.currentViewTitle&&this.currentViewTitle.option("readOnly",!1),this.saveViewButton&&this.saveViewButton.option("disabled",!1),this.saveViewAsButton&&this.saveViewAsButton.option("disabled",!1),this.viewsDataGrid&&this.viewsDataGrid.endCustomLoading()}syncUIWithCurrentView(t=!1){!t&&this.currentViewTitle&&(this.currentViewTitle.option("value",this.options.gridViewsManager.currentView.name),this.currentViewTitle.option("readOnly",this.isDefaultView)),this.viewsDropdownBox.option("value",this.options.gridViewsManager.currentViewId),setTimeout(()=>{this.viewsDataGrid&&(this.options.gridViewsManager.currentViewId===k.defaultControlDisplayView.id?this.viewsDataGrid.selectRowsByIndexes([0]):this.viewsDataGrid.selectRows([this.options.gridViewsManager.currentViewId],!1))},0);let r=this.options.gridViewsManager.currentView.isGlobal&&!this.options.canCreateGlobalViews;this.saveViewButton&&this.saveViewButton.option("disabled",this.isDefaultView||r)}async confirmChangesLoss(){return this.hasChanges?DevExpress.ui.dialog.confirm("You have unsaved changes that will be lost if you close this popup. Do you want to close the popup and not save changes?","Unsaved changes"):!0}};var nt=class{constructor(t){this.getFilterByIdInternal=t=>this.filters&&this.filters.find(r=>r.id===t);this.getFilterById=He(this.getFilterByIdInternal);this.loadDataUrl=t.loadDataUrl,this.insertDataUrl=t.insertDataUrl,this.updateDataUrl=t.updateDataUrl,this.deleteDataUrl=t.deleteDataUrl}get currentFilter(){return this.getFilterById(this._currentFilterId)}get currentFilterId(){return this._currentFilterId}set currentFilterId(t){this._currentFilterId=t}async getFilters(){return this.filters||await this.loadFilters(),this.filters}updateCurrentFilter(t){return!!this.currentFilter&&this.updateFilter(this.currentFilter.id,t)}async createNewFilter(t,r,i,n){let s=this.mapFilterModelToDto({id:-1,name:t,isDefault:i,isGlobal:n,filterState:r});return s=await x(this.insertDataUrl,"POST",s),await this.loadFilters(),this.mapFilterDtoToModel(s)}async updateFilter(t,r){let i=this.getFilterById(t);if(!i)return!1;let n=A(A({},i),r),s=this.mapFilterModelToDto(n);return s=await x(this.updateDataUrl,"PUT",s),await this.loadFilters(),!0}async deleteFilter(t){return this.getFilterById(t)?(await x(this.deleteDataUrl,"DELETE",{filterId:t}),await this.loadFilters(),!0):!1}async loadFilters(){let t=await se(this.loadDataUrl);return this.filters=t.map(r=>this.mapFilterDtoToModel(r)),this.resetCachedResultOfGetFilterByIdFunction(),this.filters}mapFilterModelToDto(t){return{Id:t.id,Name:t.name,IsDefault:t.isDefault,IsGlobal:t.isGlobal,FilterState:JSON.stringify(t.filterState)}}mapFilterDtoToModel(t){return{id:t.Id,name:t.Name,isDefault:t.IsDefault||!1,isGlobal:t.IsGlobal||!1,filterState:JSON.parse(t.FilterState)}}resetCachedResultOfGetFilterByIdFunction(){this.getFilterById=He(this.getFilterByIdInternal)}};var ho=class{constructor(t){this.isInFilterApplying=!1;this.onGridToolbarPreparing=t=>{let r=t.toolbarOptions&&t.toolbarOptions.items;!r||r.splice(1,0,this.filtersToolbarItem)};this.options=O(A({},t),{gridFiltersManager:t.gridFiltersManager?t.gridFiltersManager:new nt(t.gridFiltersManagerOptions),autoIntegration:t.autoIntegration!==void 0&&t.autoIntegration!==null?t.autoIntegration:!0}),this.options.autoIntegration&&this.integrateToGrid(this.options.owner),this.filterExpressionCalculator=$("<div />").dxFilterBuilder({fields:this.getFlatColumnsList(this.options.owner.option("columns"))}).dxFilterBuilder("instance")}async tryApplyFilter(t){let r=await this.confirmChangesLoss();return r&&await this.applyFilter(t),r}async applyFilter(t,r=!1){this.isInFilterApplying=!0,this.options.gridFiltersManager.currentFilterId=t,this.updateFilterPopupContent(this.options.gridFiltersManager.currentFilter),this.filtersDropdownBox.option("value",this.options.gridFiltersManager.currentFilterId);let i=this.options.owner.getDataSource();if(this.options.gridFiltersManager.currentFilter){this.filterExpressionCalculator.option("value",this.options.gridFiltersManager.currentFilter.filterState);let n=this.filterExpressionCalculator.getFilterExpression();if(i.isLoading()){let s=()=>{i.off("loadingChanged",s),setTimeout(()=>{i=this.options.owner.getDataSource(),i.filter(n)})};i.on("loadingChanged",s)}else i.filter(n)}else i.filter(null);r||await i.load(),this.options.onFilterApplied&&this.options.onFilterApplied(t),this.isInFilterApplying=!1}integrateToGrid(t){let r=t.option("onToolbarPreparing");t.option("onToolbarPreparing",i=>{r&&r(i),this.onGridToolbarPreparing(i)})}get filtersToolbarItem(){return this._filtersToolbarItem||(this._filtersToolbarItem=this.createFiltersToolbarItem()),this._filtersToolbarItem}get filterPopup(){return this._filterPopup||(this._filterPopup=this.createFilterPopup()),this._filterPopup}get hasChanges(){let t=this.options.gridFiltersManager.currentFilter,r=this.filterNameTextBox&&this.filterNameTextBox.option("value"),i=t&&t.name,n=this.filterBuilder&&this.filterBuilder.option("value"),s=t&&t.filterState,l=this.filterIsGlobalCheckbox&&this.filterIsGlobalCheckbox.option("value"),g=t&&t.isGlobal;return r!==i||n!==s||l!==g}createFiltersToolbarItem(){let t=!0;return{widget:"dxDropDownBox",location:"after",text:"Data Sets",visible:this.options.visible,cssClass:"aps-filters__toolbar-item",options:{elementAttr:{class:"iszolea-md"},value:this.options.gridFiltersManager.currentFilterId,valueExpr:"id",displayExpr:"name",showClearButton:!0,placeholder:"None",width:200,dropDownOptions:{width:500},onInitialized:async r=>{this.filtersDropdownBox=r.component;let[,i]=await Promise.all([this.loadFilterDropdownBoxData(),this.options.apsControlDisplayUserSettingsManager.getUserSettings()]);i.defaultFilterId&&r.component.option("value",i.defaultFilterId)},onValueChanged:async r=>{if(this.isInFilterApplying)return;if(!t){t=!0;return}let i=r.value;await this.tryApplyFilter(i)||(t=!1,i=r.previousValue,r.component.option("value",i)),this.filtersDataGrid&&this.filtersDataGrid.selectRows(i,!1),this.currentFilterTitle&&this.currentFilterTitle.option("value",r.component.option("text")||r.component.option("placeholder"))},onOpened:r=>{!r.component||this.filtersDataGrid&&this.filtersDataGrid.selectRows(r.component.option("value"),!1)},contentTemplate:r=>{if(!r.component)return;this.filtersDataGrid=this.createFiltersDataGrid(r.component),this.currentFilterTitle=this.createCurrentFilterTitle(r.component),this.newFilterButton=this.createNewFilterButton();let i=$("<div />").addClass("aps-filters__header").append(this.currentFilterTitle.element()).append(this.newFilterButton.element());return $("<div />").css("height","100%").append(i).append(this.filtersDataGrid.element())}}}}createFiltersDataGrid(t){return $("<div />").dxDataGrid({dataSource:t.getDataSource(),remoteOperations:!1,editing:{allowAdding:!1,allowUpdating:!0,allowDeleting:!0,mode:"cell",useIcons:!0,texts:{confirmDeleteMessage:"Are you sure you want to delete this data set?"}},wordWrapEnabled:!0,columns:[{dataField:"name",allowEditing:!1},{dataField:"isDefault",caption:"Is Default",dataType:"boolean",width:80},{dataField:"isGlobal",caption:"Is Global",dataType:"boolean",width:70},{type:"buttons",buttons:[{icon:"edit",hint:"Edit",onClick:async r=>{if(!r.row||!r.row.key)return;await this.tryApplyFilter(r.row.key)&&!this.filterPopup.option("visible")&&this.openEditFilterPopup(this.options.gridFiltersManager.currentFilter)}},"delete"]}],keyboardNavigation:{editOnKeyPress:!1,enabled:!1},showColumnHeaders:!0,hoverStateEnabled:!0,focusedRowEnabled:!1,showBorders:!1,showColumnLines:!1,selection:{mode:"single"},height:"calc(100% - 51px)",scrolling:{mode:"standard"},paging:{enabled:!1},noDataText:"No data sets",onSelectionChanged:r=>{t.option("value",r.selectedRowKeys?r.selectedRowKeys[0]:null)},onEditorPreparing:r=>{if(r.dataField==="isGlobal"){r.editorOptions.disabled=!this.options.canCreateGlobalFilters;let i=r.editorOptions.onValueChanged;r.editorOptions.onValueChanged=async n=>{r.component.beginCustomLoading("Updating"),await this.options.gridFiltersManager.updateFilter(r.row.data.id,{isGlobal:n.value}),r.component.endCustomLoading(),i(n)}}},onCellPrepared:r=>{r.column.type!=="buttons"||!r.data||r.column.type==="buttons"&&(!r.data.isGlobal||r.data.isGlobal&&this.options.canCreateGlobalFilters||Array.from(r.cellElement.children()).forEach(n=>{$(n).css({color:"#ddd !important",cursor:"default"}).off("click")}))},onRowUpdating:r=>{if(!r.key||r.newData.isDefault===void 0)return;let i=r.component.getDataSource().items().find(n=>n.isDefault);i&&(i.isDefault=!1),this.options.apsControlDisplayUserSettingsManager.updateUserSettings({defaultFilterId:r.newData.isDefault?r.key:void 0})},onRowRemoving:r=>{!r.key||this.deleteFilter(r.key)}}).dxDataGrid("instance")}createCurrentFilterTitle(t){return $("<div />").addClass("aps-filters__current-filter").dxTextBox({value:t.option("text")||t.option("placeholder"),readOnly:!0}).dxTextBox("instance")}createNewFilterButton(){return $("<button />").addClass("aps-filters__add-new-filter iszolea-md").dxButton({text:"New Data Set",type:"normal",onClick:()=>{this.openNewFilterPopup()},icon:"plus"}).dxButton("instance")}createFilterPopup(){let t=$("<div />").appendTo("body"),r=!1;return t.dxPopup({container:this.options.owner.element(),shading:!1,resizeEnabled:!0,width:650,height:500,onShowing:i=>{this.filtersDropdownBox&&this.filtersDropdownBox.close()},onHiding:async i=>{if(!this.hasChanges||r){r=!1;return}i.cancel=!0,r=await this.confirmChangesLoss(),r&&(i.component.hide(),this.filtersDropdownBox&&this.filtersDropdownBox.open())}}).dxPopup("instance")}createFilterNameTextBox(){return $("<div />").dxTextBox({placeholder:"Enter Data Set Name..."}).dxTextBox("instance")}createFilterIsGlobalCheckbox(){return $("<div />").dxCheckBox({text:"Global data set"}).dxCheckBox("instance")}getFlatColumnsList(t,...r){let i=[];for(let n of t)if(n.columns&&n.columns.length>0){let s=this.getFlatColumnsList(n.columns);i=i.concat(s)}else{let s=$.extend({},n);if(s.dataType==="date"||s.dataType==="datetime"){let l=s.dataType==="datetime",g="dd MMM yy",y=l?"hh:mm, dd MMM yy":g,m=T=>{let S=T.split(", "),_=DevExpress.localization.parseDate(S[1],g)||null;if(_){let w=S[0].split(":");return _.setHours(parseInt(w[0])),_.setMinutes(parseInt(w[1])),_}else return null};s.format=y,s.editorTemplate=T=>$("<div />").dxDateBox({displayFormat:y,type:l?"datetime":"date",width:150,onValueChanged:({value:S})=>{T.setValue(DevExpress.localization.formatDate(S,y))},value:(l?m(T.value):DevExpress.localization.parseDate(T.value,y))||null}),s.filterOperations=["=","<>","<",">","<=",">=","isblank","isnotblank"],s.calculateFilterExpression=function(T){let S=[t,...r];return S[0]&&(l?S[0]=m(S[0]):S[0]=DevExpress.localization.parseDate(T,y)||null),this.defaultCalculateFilterExpression(...S)}}i.push(s)}return i.sort((n,s)=>{let l=(n.caption||"").toLowerCase(),g=(s.caption||"").toLowerCase();return l<g?-1:l>g?1:0})}createFilterBuilder(){return $("<div />").dxFilterBuilder({fields:this.getFlatColumnsList(this.options.owner.option("columns"))}).dxFilterBuilder("instance")}createFilterPopupContent(t){let r=$("<div />").height("100%"),i=$('<div class="aps-filters__name-container" />').height("36px");this.filterNameTextBox=this.createFilterNameTextBox(),this.filterBuilder=this.createFilterBuilder(),this.filterIsGlobalCheckbox=this.createFilterIsGlobalCheckbox(),this.filterNameTextBox.option("value",t&&t.name),this.filterNameTextBox.element().appendTo(i),this.filterIsGlobalCheckbox.option("value",t&&t.isGlobal),this.filterIsGlobalCheckbox.element().appendTo(i),this.filterIsGlobalCheckbox.option("disabled",!this.options.canCreateGlobalFilters),i.appendTo(r),this.filterBuilder.option("value",t&&t.filterState);let n=$("<div />").height("calc(100% - 36px)").appendTo(r);return this.filterBuilder.element().appendTo(n),n.dxScrollView({scrollByContent:!0}),r}createFilterPopupToolbarItems(t){return t?[this.createUpdateFilterPopupToolbarItem(),this.createSaveFilterAsNewPopupToolbarItem(),this.createResetFilterPopupToolbarItem(),this.createDeleteFilterPopupToolbarItem()]:[this.createSaveFilterPopupToolbarItem()]}createSaveFilterPopupToolbarItem(){return{toolbar:"bottom",widget:"dxButton",location:"before",options:{text:"Apply and Save",onClick:this.createNewFilter.bind(this),icon:"save"}}}createUpdateFilterPopupToolbarItem(){return{toolbar:"bottom",widget:"dxButton",location:"before",options:{text:"Apply and Update",onClick:()=>{!this.options.gridFiltersManager.currentFilter||this.updateFilter(this.options.gridFiltersManager.currentFilter)},icon:"save"}}}createSaveFilterAsNewPopupToolbarItem(){return{toolbar:"bottom",widget:"dxButton",location:"before",options:{text:"Save As New",onClick:this.createNewFilter.bind(this),icon:"save"}}}createResetFilterPopupToolbarItem(){return{toolbar:"bottom",widget:"dxButton",location:"before",options:{text:"Reset",onClick:async()=>{!this.hasChanges||!this.filterBuilder||!this.options.gridFiltersManager.currentFilter||!await DevExpress.ui.dialog.confirm("Are you sure you want to reset unsaved changes?","Reset the data set")||this.resetChanges()},icon:"undo"}}}createDeleteFilterPopupToolbarItem(){return{toolbar:"bottom",widget:"dxButton",location:"before",options:{text:"Delete Data Set",onClick:async()=>{!this.options.gridFiltersManager.currentFilter||!await DevExpress.ui.dialog.confirm(`Are you sure you want to delete the "${this.options.gridFiltersManager.currentFilter.name}" data set?`,"Delete the data set")||(await this.deleteFilter(this.options.gridFiltersManager.currentFilterId),this.filterPopup.hide())},icon:"trash"}}}async openNewFilterPopup(){!await this.tryApplyFilter(void 0)||(this.updateFilterPopupContent(),this.filterPopup.show())}openEditFilterPopup(t){this.updateFilterPopupContent(t),this.filterPopup.show()}updateFilterPopupContent(t){let r=this.filterPopup.option("animation");this.filterPopup.option("animation",void 0),this.filterPopup.option("title",t?`Edit the "${t.name}" data set`:"Create a new data set"),this.filterPopup.option("contentTemplate",()=>this.createFilterPopupContent(t)),this.filterPopup.option("toolbarItems",this.createFilterPopupToolbarItems(t)),this.filterPopup.repaint(),this.filterPopup.option("animation",r)}async createNewFilter(){if(!this.filterNameTextBox||!this.filterBuilder||!this.filterIsGlobalCheckbox)return;let t=this.filterNameTextBox.option("value"),r=this.filterBuilder.option("value"),i=!1,n=this.filterIsGlobalCheckbox.option("value");if(!t)return;let s=await this.options.gridFiltersManager.createNewFilter(t,r,i,n);await this.loadFilterDropdownBoxData(),await this.applyFilter(s.id),U("Created",!0)}async updateFilter(t){if(!this.filterNameTextBox||!this.filterBuilder||!this.filterIsGlobalCheckbox)return;let r=this.filterNameTextBox.option("value"),i=this.filterBuilder.option("value"),n=this.filterIsGlobalCheckbox.option("value");!r||!await this.options.gridFiltersManager.updateFilter(t.id,{name:r,filterState:i,isGlobal:n})||(U("Updated",!0),await this.applyFilter(this.options.gridFiltersManager.currentFilter.id),await this.loadFilterDropdownBoxData())}async deleteFilter(t){await this.options.gridFiltersManager.deleteFilter(t),this.options.onFilterDeleted&&this.options.onFilterDeleted(t),await this.applyFilter(void 0),await this.loadFilterDropdownBoxData()}resetChanges(){this.filterNameTextBox.option("value",this.options.gridFiltersManager.currentFilter.name),this.filterBuilder.option("value",this.options.gridFiltersManager.currentFilter.filterState),this.filterIsGlobalCheckbox.option("value",this.options.gridFiltersManager.currentFilter.isGlobal)}async loadFilterDropdownBoxData(){if(!this.filtersDropdownBox)return;let[t,r]=await Promise.all([this.options.apsControlDisplayUserSettingsManager.getUserSettings(),this.options.gridFiltersManager.getFilters()]);if(t.defaultFilterId){let n=r.find(s=>s.id===t.defaultFilterId);n&&(n.isDefault=!0)}let i=new DevExpress.data.ArrayStore({key:"id",data:r});this.filtersDropdownBox.option("dataSource",i),this.filtersDataGrid&&this.filtersDataGrid.option("dataSource",i)}async confirmChangesLoss(){return await new Promise(t=>setTimeout(()=>t(),0)),!this.hasChanges||!this.filterPopup.option("visible")?!0:DevExpress.ui.dialog.confirm("You have unsaved changes that will be lost if you close this popup. Do you want to close the popup and not save changes?","Unsaved changes")}};var st=class{constructor(t){this.$container=t.$container,this.cssClass=t.cssClass,this.maxFileSize=t.maxFileSize,this.acceptedFileTypes=t.acceptedFileTypes,this.selectButtonText=t.selectButtonText,this.allowedFileExtensions=t.allowedFileExtensions,this.onValueChanged=t.onValueChanged,this.onUploadStarted=t.onUploadStarted,this.onUploaded=t.onUploaded}render(){let t=$("<div />");this.cssClass&&t.addClass(this.cssClass),this.fileUploader=t.dxFileUploader({selectButtonText:this.selectButtonText,labelText:"",allowedFileExtensions:this.allowedFileExtensions,accept:this.acceptedFileTypes,uploadMode:"useForm",maxFileSize:this.maxFileSize,showFileList:!1,onValueChanged:r=>{var i;r.component.option("labelText",r.value[0]?r.value[0].name:""),(i=this.onValueChanged)==null||i.call(this,r)},onUploadStarted:r=>{var i;r.element.find(".dx-fileuploader-upload-button").hide(),(i=this.onUploadStarted)==null||i.call(this,r)},onUploaded:r=>{var i;(i=this.onUploaded)==null||i.call(this,r)}}).dxFileUploader("instance"),this.$container.append(this.fileUploader.element())}upload(t,r){return new Promise((i,n)=>{let s=new FormData,l=this.fileUploader.element().find("input")[0].files[0];s.append("file",l);for(let g in r)s.append(g,r[g]);$.ajax({url:t,type:"post",data:s,contentType:!1,processData:!1,success:g=>{g.RequestState===1?i(g.Data):n(g.Message)},error:g=>n("Unknown error")})})}};var _t=class extends J{constructor(t){super();this.fileUploadUrl=t.fileUploadUrl,this.$container=t.$container,this.title=t.title,this.getTablesListUrl=t.getTablesListUrl,this.createTableUrl=t.createTableUrl,this.addRowsUrl=t.addRowsUrl,this.predefinedTable=t.predefinedTable,this.canChangeMode=t.predefinedImportFileMode===void 0,this.mode=t.predefinedImportFileMode!==void 0?t.predefinedImportFileMode:0,this.createTableButtonText=t.createTableButtonText||"Create Table",this.updateTableButtonText=t.updateTableButtonText||"Add New Rows",this.createTableModeText=t.createTableModeText||"Create Table",this.updateTableModeText=t.updateTableModeText||"Add New Rows"}show(){this.popup=$("<div />").appendTo(this.$container).dxPopup({showTitle:!0,title:this.title,visible:!1,dragEnabled:!1,resizeEnabled:!1,showCloseButton:!0,hideOnOutsideClick:!1,fullScreen:!0,maxWidth:1300,maxHeight:800,contentTemplate:t=>{let r=$("<div />");this.form=this.createForm(),r.append(this.form.element()),r.dxScrollView({width:"100%",height:"100%"}).appendTo(t)},toolbarItems:[{toolbar:"bottom",widget:"dxButton",location:"after",options:{text:this.getActionButtonText(),type:"success",onInitialized:t=>{this.actionButton=t.component},onClick:async()=>{this.mode===0?this.createTable():this.addRowsToTable()}}},{toolbar:"bottom",widget:"dxButton",location:"after",options:{text:"Cancel",onClick:()=>this.popup.hide()}}]}).dxPopup("instance"),this.popup.show(),this.onModeSwitching()}dispose(){this.popup&&this.popup.dispose()}createForm(){return $("<div>").dxForm({showColonAfterLabel:!0,labelLocation:"top",colCountByScreen:{md:4,sm:1},screenByWidth:r=>r<1256?"sm":"md",items:[{dataField:"Mode",itemType:"simple",template:(r,i)=>{this.createModeSwitcher(i)}},{dataField:"Schema",editorOptions:{disabled:!this.canChangeMode},validationRules:[{type:"required"}]},{dataField:"Table",editorOptions:{disabled:!this.canChangeMode},validationRules:[{type:"required"}]},{dataField:"TableSelector",label:{text:"Table"},editorType:"dxSelectBox",visible:!1,colSpan:2,editorOptions:{dataSource:new DevExpress.data.DataSource({store:Q({loadUrl:this.getTablesListUrl,loadParams:{contextName:"",tablesOnly:!0,isWarehouseContext:!0},loadMethod:"post",notifyError:!1}),paginate:!1,sort:"this"}),searchEnabled:!0},validationRules:[{type:"required"}]},{dataField:"Source File",itemType:"simple",template:(r,i)=>{this.createFilesUploader(i)}},{dataField:"Columns Selector",label:{visible:!1},colSpan:4,itemType:"simple",template:(r,i)=>{this.createDataGrid(i)}}]}).dxForm("instance")}createModeSwitcher(t){$("<div />").dxButtonGroup({items:[{text:this.createTableModeText,icon:"inserttable",value:0},{text:this.updateTableModeText,icon:"insertrowbelow",value:1}],keyExpr:"value",disabled:!this.canChangeMode,stylingMode:"outlined",selectionMode:"single",selectedItemKeys:[this.mode],onItemClick:r=>{this.mode=r.itemData.value,this.onModeSwitching()}}).appendTo(t)}createFilesUploader(t){this.fileUploader=new st({$container:t,cssClass:"table-creator__upload",maxFileSize:10*1e6,acceptedFileTypes:".xls, .xlsx",allowedFileExtensions:[".xls",".xlsx"],selectButtonText:"Select Excel file",onValueChanged:async()=>{this.dataGrid.beginCustomLoading("Parsing selected file..."),this.fileUploader.upload(this.fileUploadUrl).then(r=>{if(r){this.setRowsCount(r.RowsCount);let i=new DevExpress.data.DataSource({store:{type:"array",key:"Id",data:r.Columns},paginate:!1});this.dataGrid.option("dataSource",i)}}).catch(r=>{U(`Parsing Error : ${r}`,!1)}).finally(()=>{this.dataGrid.endCustomLoading()})}}),this.fileUploader.render()}createDataGrid(t){let r={noDataText:"Select Excel File",hoverStateEnabled:!0,searchPanel:{visible:!1},groupPanel:{visible:!1},headerFilter:{visible:!1},filterRow:{visible:!1},sorting:{mode:"none"},paging:{pageSize:1e4,enabled:!1},editing:{allowUpdating:!0,mode:"cell"},selection:{mode:"none"},columns:[{dataField:"Id",visible:!1},{dataField:"Selected",dataType:"boolean",visible:this.mode===0},{dataField:"IsKeyColumn",dataType:"boolean",visible:this.mode===0},{dataField:"Name",caption:"Column Name"},{dataField:"Type",allowEditing:!1},{dataField:"IsNullable",allowEditing:this.mode===0&&this.canChangeMode,setCellValue:(i,n)=>{i.IsNullable=n,n&&(i.IsKeyColumn=!1)}}],remoteOperations:!1,onToolbarPreparing:i=>{i.toolbarOptions.items.push({template:()=>$("<div>").append($("<span>").addClass("table-creator__table-header").text("Parsed File Metadata")),location:"before"},{template:()=>(this.rowsCounter=$("<span>").text("1000"),this.rowsCounterContainer=$("<div>").append($("<span>").text("Rows Count: "),this.rowsCounter).hide(),this.rowsCounterContainer),location:"after"})},onEditorPreparing:i=>{if(i.parentType==="dataRow"&&i.dataField==="IsKeyColumn"){let n=i.editorOptions;n.disabled=i.row.data.IsNullable}}};this.dataGrid=G($("<div />"),{options:r,summaryColumn:"Name",isFullScreen:!1,setDefaultColumnWidth:!1}),t.append(this.dataGrid.element())}createTable(){if(this.form.validate().isValid){let r=this.dataGrid.getDataSource();r||U("Select file with data",!1);let i=r.items();if(!this.areColumnsValid(i))U("At least 1 key column must be set",!1);else{let n={schema:this.form.option("formData").Schema,table:this.form.option("formData").Table,columns:JSON.stringify(i)};this.dataGrid.beginCustomLoading("Creating and filling DB table..."),this.fileUploader.upload(this.createTableUrl,n).then(s=>{s===!0?(this.popup.hide(),U(`The table [${n.schema}].[${n.table}] has been created`,!0),this.emit(_t.TABLE_UPDATED_EVENT)):U("The table has not been created",!1)}).catch(s=>{U(`Table creating error: ${s}`,!1)}).finally(()=>{this.dataGrid.endCustomLoading()})}}}addRowsToTable(){if(this.form.validate().isValid){let r=this.dataGrid.getDataSource();r||U("Select file with data",!1);let i=r.items(),n={table:this.form.option("formData").TableSelector,columns:JSON.stringify(i)};this.dataGrid.beginCustomLoading("Adding rows to DB table..."),this.fileUploader.upload(this.addRowsUrl,n).then(s=>{s===!0?(this.popup.hide(),U(`The table ${n.table} has been updated`,!0),this.emit(_t.TABLE_UPDATED_EVENT)):U("The table has not been updated",!1)}).catch(s=>{U(`Table updating error: ${s}`,!1)}).finally(()=>{this.dataGrid.endCustomLoading()})}}onModeSwitching(){let t=this.mode===0;this.actionButton.option("text",this.getActionButtonText()),this.dataGrid.columnOption("IsKeyColumn","visible",t),this.dataGrid.columnOption("IsNullable","visible",t),this.canChangeMode?(this.form.itemOption("Schema","visible",t),this.form.itemOption("Table","visible",t),this.form.itemOption("TableSelector","visible",!t)):(this.form.itemOption("Schema","visible",!0),this.form.updateData("Schema",this.predefinedTable.schema),this.form.itemOption("Table","visible",!0),this.form.updateData("Table",this.predefinedTable.table),this.form.itemOption("TableSelector","visible",!1))}getActionButtonText(){return this.mode===0?this.createTableButtonText:this.updateTableButtonText}areColumnsValid(t){return t.filter(r=>r.Selected).some(r=>r.IsKeyColumn)}setRowsCount(t){this.rowsCounterContainer.show(),this.rowsCounter.text(t)}},De=_t;De.TABLE_UPDATED_EVENT="file-importer-table-updated-event";var mo=class{constructor(t){this.onGridToolbarPreparing=t=>{let r=t.toolbarOptions&&t.toolbarOptions.items;if(!r)return;let i=[this.displaysToolbarItem];this.importFileOptions&&this.importFileOptions.mode!==0&&i.push(this.importFileToolbarItem),r.splice(1,0,...i)};this.options=t,this.gridDisplaysManager=t.gridDisplaysManager,this.gridViewsManager=t.gridViewsManager,this.gridFiltersManager=t.gridFiltersManager,this.importFileOptions=t.importFileOptions,this.gridDisplaysManager.onDisplaisLoaded=r=>{let i=new DevExpress.data.ArrayStore({key:"Id",data:r});this.displaysDropdownBox&&this.displaysDropdownBox.option("dataSource",i),this.dataGrid&&this.dataGrid.option("dataSource",i),this.dataGrid&&this.dataGrid.endCustomLoading()},this.gridDisplaysManager.onDisplayChanged=r=>{this.displaysDropdownBox&&this.displaysDropdownBox.option("value",r?r.Id:null),this.currentDisplayTitle&&this.currentDisplayTitle.option("value",r?r.Name:null),this.currentDisplayTitle&&this.currentDisplayTitle.option("disabled",!r),this.saveAsButton&&this.saveAsButton.option("disabled",!r),this.saveButton&&this.saveButton.option("disabled",!r),this.dataGrid&&(r?this.dataGrid.selectRows([r.Id],!1):this.dataGrid.deselectAll())},this.integrateToGrid(this.options.owner)}integrateToGrid(t){let r=t.option("onToolbarPreparing");t.option("onToolbarPreparing",i=>{r&&r(i),this.onGridToolbarPreparing(i)})}createDataGrid(t){return $("<div />").dxDataGrid({dataSource:t.getDataSource(),remoteOperations:!1,editing:{allowAdding:!1,allowUpdating:!1,allowDeleting:this.options.editMode,mode:"row",useIcons:!0,texts:{confirmDeleteMessage:"Are you sure you want to delete this display?"}},loadPanel:{shading:!0},allowColumnResizing:!0,columnAutoWidth:!0,wordWrapEnabled:!0,columns:[{dataField:"Name",caption:"Display"},{dataField:"FilterId",caption:"Data Set",lookup:{valueExpr:"id",displayExpr:"name"}},{dataField:"ViewId",caption:"View",lookup:{valueExpr:"id",displayExpr:"name"}}],keyboardNavigation:{editOnKeyPress:!1,enabled:!1},showColumnHeaders:!0,hoverStateEnabled:!0,focusedRowEnabled:!1,showBorders:!1,height:this.options.editMode?"calc(100% - 51px)":"100%",scrolling:{mode:"standard"},paging:{enabled:!1},noDataText:"No displays",onInitialized:async r=>{let i=await this.gridFiltersManager.getFilters(),n=await this.gridViewsManager.getViews();r.component.columnOption("FilterId","lookup.dataSource",i),r.component.columnOption("ViewId","lookup.dataSource",n)},onCellClick:async r=>{r.rowType==="data"&&t.option("value",r.data.Id)},onRowRemoving:async r=>{this.dataGrid.beginCustomLoading("Loading"),await this.gridDisplaysManager.deleteDisplay(r.key)}}).dxDataGrid("instance")}createDisplaysToolbarItem(){let t={valueExpr:"Id",displayExpr:"Name",showClearButton:!0,placeholder:"None",width:200,onInitialized:i=>{this.displaysDropdownBox=i.component,this.gridDisplaysManager.getDisplays()},onValueChanged:async i=>{let n=this.gridDisplaysManager.currentDisplay,s=n&&n.FilterId!==this.gridFiltersManager.currentFilterId,l=n&&n.ViewId!==this.gridViewsManager.currentViewId;await(s||l?this.confirmChangesLoss():Promise.resolve(!0))&&(this.gridDisplaysManager.currentDisplayId=i.value)}},r={elementAttr:{class:"iszolea-md"},dropDownOptions:{width:800},contentTemplate:this.options.editMode?i=>{this.dataGrid=this.createDataGrid(i.component),this.currentDisplayTitle=this.createCurrentDisplayTitle(i.component),this.saveButton=this.createSaveViewButton(),this.saveAsButton=this.createSaveViewAsButton();let n=$("<div />").addClass("aps-displays__header").append(this.currentDisplayTitle.element()).append(this.saveButton.element()).append(this.saveAsButton.element()),s=$("<div />").height("100%");return this.options.editMode&&s.append(n),s.append(this.dataGrid.element()),s}:void 0,onOpened:()=>{this.saveAsButton&&this.saveAsButton.option("disabled",!this.gridFiltersManager.currentFilterId),this.saveButton&&this.saveButton.option("disabled",!this.gridDisplaysManager.currentDisplay)}};return{widget:this.options.editMode?"dxDropDownBox":"dxSelectBox",location:"after",text:"Displays",cssClass:"aps-displays__toolbar-item",options:this.options.editMode?$.extend(t,r):t}}createImportFileToolbarItem(){return{location:"after",widget:"dxButton",options:{icon:"upload",hint:"Import file",height:30,stylingMode:"text",onClick:()=>{this.fileImporter&&this.fileImporter.dispose(),this.fileImporter=new De({$container:this.options.owner.element().parent(),title:"Import File to CDM",createTableUrl:this.importFileOptions.createTableUrl,addRowsUrl:this.importFileOptions.addRowsUrl,fileUploadUrl:this.importFileOptions.fileUploadUrl,predefinedImportFileMode:this.getPredefinedImportFileMode(this.importFileOptions.mode),predefinedTable:this.importFileOptions.predefinedTable,createTableButtonText:"Replace All Rows",createTableModeText:"Replace Rows"}),this.fileImporter.on(De.TABLE_UPDATED_EVENT,()=>this.options.owner.refresh()),this.fileImporter.show()},onContentReady:t=>{t.element.find(".dx-button-content").css({paddingTop:5,paddingBottom:5})}}}}getPredefinedImportFileMode(t){switch(t){case 1:return 1;case 2:return 0;default:throw new Error("Unsupported mode")}}createCurrentDisplayTitle(t){return $("<div />").addClass("aps-displays__current-display iszolea-md").dxTextBox({value:t.option("text")||t.option("placeholder"),disabled:!this.gridDisplaysManager.currentDisplay}).dxTextBox("instance")}createSaveViewButton(){return $("<button />").addClass("aps-displays__save-display iszolea-md").dxButton({text:"Save",type:"normal",disabled:!this.gridDisplaysManager.currentDisplay,onClick:()=>{this.dataGrid.beginCustomLoading("Loading"),this.gridDisplaysManager.updateCurrentDisplay(this.currentDisplayTitle.option("value"),this.gridFiltersManager.currentFilterId,this.gridViewsManager.currentViewId)},icon:"save",width:125}).dxButton("instance")}createSaveViewAsButton(){return $("<button />").addClass("aps-display__save-display-as iszolea-md").dxButton({text:"Save As",type:"normal",disabled:!this.gridFiltersManager.currentFilterId,onClick:()=>this.createSaveAsDialog(),icon:"save",width:160}).dxButton("instance")}createSaveAsDialog(){let t=$("<div />"),r=$('<div style="margin-bottom:8px;" />').dxTextBox({placeholder:"Display Name",showClearButton:!0}).dxValidator({validationRules:[{type:"required"}]}),i=r.dxTextBox("instance"),n=r.dxValidator("instance");return i.element().appendTo(t),K({title:"Create New Display",height:"auto",width:"100%",maxWidth:"300px"},t,{text:"Ok",onClick:async s=>{!n.validate().isValid||(this.dataGrid.beginCustomLoading("Loading"),this.gridDisplaysManager.createNewDisplay(i.option("value"),this.gridFiltersManager.currentFilterId,this.gridViewsManager.currentViewId),s())}},{text:"Cancel",onClick:s=>s()})}async confirmChangesLoss(){return DevExpress.ui.dialog.confirm("You have unsaved changes that will be lost if you close this popup. Do you want to close the popup and not save changes?","Unsaved changes")}get displaysToolbarItem(){return this._displaysToolbarItem||(this._displaysToolbarItem=this.createDisplaysToolbarItem()),this._displaysToolbarItem}get importFileToolbarItem(){return this._importFileToolbarItem||(this._importFileToolbarItem=this.createImportFileToolbarItem()),this._importFileToolbarItem}};var fo=class{constructor(t){this._currentDisplayId=0;this.getDisplayById=t=>!t||!this.displays?null:this.displays.find(r=>r.Id===t);this.loadDataUrl=t.loadDataUrl,this.insertDataUrl=t.insertDataUrl,this.updateDataUrl=t.updateDataUrl,this.deleteDataUrl=t.deleteDataUrl,this.eventHandlers={changed:[],loaded:[]}}async loadDisplays(){return this.displays=await se(this.loadDataUrl),this.onDisplaisLoadedPrivate(),this.displays}async getDisplays(){return this.displays||await this.loadDisplays()}async createNewDisplay(t,r,i){let n={Id:0,Name:t,FilterId:r,ViewId:i};await x(this.insertDataUrl,"POST",n),await this.loadDisplays()}async deleteDisplay(t){await x(this.deleteDataUrl,"DELETE",{id:t}),await this.loadDisplays()}updateCurrentDisplay(t,r,i){return this.updateDisplay(this.currentDisplay.Id,t,r,i)}async updateDisplay(t,r,i,n){await x(this.updateDataUrl,"PUT",{id:t,name:r,filterId:i,viewId:n}),await this.loadDisplays()}onDisplayChangedPrivate(){this.eventHandlers.changed.forEach(t=>t(this.currentDisplay))}onDisplaisLoadedPrivate(){this.eventHandlers.loaded.forEach(t=>t(this.displays))}get currentDisplayId(){return this._currentDisplayId}set currentDisplayId(t){this._currentDisplayId=t,this.onDisplayChangedPrivate()}get currentDisplay(){return this.getDisplayById(this._currentDisplayId)}set onDisplayChanged(t){this.eventHandlers.changed.push(t)}set onDisplaisLoaded(t){this.eventHandlers.loaded.push(t)}};var yo=class{constructor(t){this.onGridEditorPreparing=t=>{if(!t.component||!t.editorOptions||t.parentType!=="dataRow"||!t.dataField||!t.row||!t.row.key)return;let r=t.dataField,i=t.row.key,n=t.editorOptions.onValueChanged;t.editorOptions.onValueChanged=s=>{n(s),this.updateMultipleRows(r,i,s.value)}};this.options=O(A({},t),{autoIntegration:t.autoIntegration!==void 0&&t.autoIntegration!==null?t.autoIntegration:!0}),this.options.autoIntegration&&this.integrateToGrid(this.options.owner)}integrateToGrid(t){t.option("selection",{mode:"multiple"}),t.on("editorPreparing",this.onGridEditorPreparing)}async updateMultipleRows(t,r,i){let n=await this.options.owner.getSelectedRowKeys();if(!n.length)return;let s=n.findIndex(l=>l===r);s<0||n.length===1||(n.splice(s,1),n.forEach(l=>{this.options.owner.cellValue(this.options.owner.getRowIndexByKey(l),t,i)}))}};var vo=class{constructor(t){this.defaultUserSettings={defaultFilterId:void 0,defaultViewId:k.defaultControlDisplayView.id};this.isLatestLoadedUserSettingsExpired=!0;this.options=A({},t),this.options.loadedUserSettings&&(this.latestLoadedUserSettings=this.options.loadedUserSettings),this.startAutoCacheResettingTimer()}get latestLoadedUserSettings(){return this._latestLoadedUserSettings}set latestLoadedUserSettings(t){this._latestLoadedUserSettings=t,this.isLatestLoadedUserSettingsExpired=!1}async getUserSettings(){if(!this.isLatestLoadedUserSettingsExpired)return this.latestLoadedUserSettings;try{this.latestLoadedUserSettings=await this.loadUserSettings()}catch(t){console.error(t)}return this.latestLoadedUserSettings}async updateUserSettings(t){try{this.latestLoadedUserSettings=await this.updateUserSettingsInternal(t)}catch(r){console.error(r)}return this.latestLoadedUserSettings}startAutoCacheResettingTimer(){this.autoResettingCacheTimerId=window.setInterval(()=>{this.isLatestLoadedUserSettingsExpired=!0},5e3)}stopAutoCacheResettingTimer(){window.clearInterval(this.autoResettingCacheTimerId)}},Dt=class extends vo{async loadUserSettings(){let t=localStorage.getItem(Dt.userSettingsStorageKey);return t?JSON.parse(t):this.defaultUserSettings}async updateUserSettingsInternal(t){let r=await this.getUserSettings(),i=A(A({},r),t);return localStorage.setItem(Dt.userSettingsStorageKey,JSON.stringify(i)),i}},yr=Dt;yr.userSettingsStorageKey="aps:control-display:user-settings";var So=class extends vo{constructor(t){super(t);this.loadDataUrl=t.loadDataUrl,this.updateDataUrl=t.updateDataUrl}async loadUserSettings(){let t=await se(this.loadDataUrl);return t?this.mapControlDisplayUserSettingsDtoToModel(t):this.defaultUserSettings}async updateUserSettingsInternal(t){let r=await this.getUserSettings(),i=A(A({},r),t),n=await x(this.updateDataUrl,"PUT",this.mapControlDisplayUserSettingsModelToDto(i));return this.mapControlDisplayUserSettingsDtoToModel(n)}mapControlDisplayUserSettingsModelToDto(t){return{DefaultFilterId:t.defaultFilterId,DefaultViewId:t.defaultViewId}}mapControlDisplayUserSettingsDtoToModel(t){return{defaultFilterId:t.DefaultFilterId,defaultViewId:t.DefaultViewId}}};function vr(o){let t="",r=o.filter(n=>n.visible),i=r.filter(n=>n.visibleIndex!==null&&n.visibleIndex!==void 0);return i.length?t=i.sort((n,s)=>n.visibleIndex-s.visibleIndex)[0].dataField:t=r[0]&&r[0].dataField||"",t}var at=class{constructor(t){this.onViewApplied=t=>{this.clearFilterRowAfterViewSwitching()};this.$container=t.$container,this.isStandalonePage=t.isStandalonePage,this.pageTitle=t.pageTitle,this.exportFileName=t.exportFileName,this.userName=t.userName,this.userConfigUrl=t.userConfigUrl,this.controlLogsUrl=t.controlLogsUrl,this.loadDataUrl=t.loadDataUrl,this.updateDataUrl=t.updateDataUrl,this.addDataUrl=t.addDataUrl,this.deleteDataUrl=t.deleteDataUrl,this.uploadDocumentUrl=t.uploadDocumentUrl,this.downloadDocumentUrl=t.downloadDocumentUrl,this.gridFiltersManagerOptions=t.gridFiltersManagerOptions,this.gridViewsManagerOptions=t.gridViewsManagerOptions,this.gridDisplaysManagerOptions=t.gridDisplaysManagerOptions,this.remoteControlDisplayUserSettingsManagerLoadOptions=t.remoteControlDisplayUserSettingsManagerLoadOptions,this.importFileOptions=t.importFileOptions,this.disableGlobalSearch=!!t.disableGlobalSearch,this.allowDataEditing=t.allowDataEditing,this.imageManager=new Ve,this.imageManager.onUploaded(async r=>{let i=this.imageManager.images.length;this.imageManager.images=await this.uploadAndUpdateDocuments(r,1),this.imageManager.selectedIndex=i}),this.imageManager.onDeleted(r=>{this.imageManager.images=this.deleteDocumentHandler(r)}),this.documentManager=new Ge({width:400,height:600}),this.documentManager.onUploaded(async r=>{this.documentManager.documents=await this.uploadAndUpdateDocuments(r,2)}),this.documentManager.onDeleted(r=>{this.documentManager.documents=this.deleteDocumentHandler(r)}),this.documentManager.onDownload(r=>{window.open(`${this.downloadDocumentUrl}?name=${r}`,"_blank")}),this.imageGallery=new ke,this.$container.addClass(["aps-grid","control-display-grid"]),this.loadPanel=$("<div />").dxLoadPanel({message:"Uploading..."}).dxLoadPanel("instance"),$(document.body).append(this.loadPanel.element())}showLoader(t="Uploading..."){this.loadPanel.option("message",t),this.loadPanel.show()}hideLoader(){this.loadPanel.hide()}render(){x(this.userConfigUrl).then(t=>{let r=new nt(this.gridFiltersManagerOptions),i=new k(this.gridViewsManagerOptions),n=new fo(this.gridDisplaysManagerOptions);this.mainGrid=this.createMainGrid(t.FieldsConfiguration);let s=t.CanCreateDisplays&&t.CanCreateViews&&t.CanCreateFilters;(s||t.CanApplayDisplays)&&(this.gridDisplaysToolbarComponent=new mo({owner:this.mainGrid,editMode:s,gridFiltersManager:r,gridViewsManager:i,gridDisplaysManager:n,importFileOptions:this.importFileOptions})),this.gridViewsToolbarComponent=new co({owner:this.mainGrid,onViewApplied:this.onViewApplied,onViewDeleted:async()=>{await n.loadDisplays()},autoIntegration:!0,gridViewsManager:i,canCreateGlobalViews:t.CanCreateGlobalViews,visible:t.CanCreateViews}),this.gridFiltersToolbarComponent=new ho({apsControlDisplayUserSettingsManager:new So({userId:this.userName,loadDataUrl:this.remoteControlDisplayUserSettingsManagerLoadOptions.loadDataUrl,updateDataUrl:this.remoteControlDisplayUserSettingsManagerLoadOptions.updateDataUrl}),owner:this.mainGrid,onFilterDeleted:async l=>{await n.loadDisplays()},autoIntegration:!0,gridFiltersManager:r,canCreateGlobalFilters:t.CanCreateGlobalFilters,visible:t.CanCreateFilters}),this.multipleEditingDataGridPlugin=new yo({owner:this.mainGrid}),n.onDisplayChanged=async l=>{l?(await this.gridFiltersToolbarComponent.applyFilter(l.FilterId,!0),await this.gridViewsToolbarComponent.applyView(l.ViewId)):(this.gridFiltersToolbarComponent.applyFilter(void 0,!0),await this.gridViewsToolbarComponent.applyView(k.defaultControlDisplayView.id))}})}async uploadAndUpdateDocuments(t,r){let i=[];try{this.showLoader("Uploading...");let n=new FormData;n.append("type",r.toString());for(let g of t)n.append("files",g);let l=await(await fetch(this.uploadDocumentUrl,{method:"POST",body:n})).json();if(l.RequestState===1){let g=this.mainGrid.cellValue(this.activeDocumentCellInfo.rowIndex,this.activeDocumentCellInfo.field),p=ae(g)?JSON.parse(g):[],y=l.Data;p.push(...y),this.mainGrid.cellValue(this.activeDocumentCellInfo.rowIndex,this.activeDocumentCellInfo.field,JSON.stringify(p)),i=p}else U(l.Message,!1)}catch{U("Error",!1)}finally{this.hideLoader()}return i}deleteDocumentHandler(t){let r=this.mainGrid.cellValue(this.activeDocumentCellInfo.rowIndex,this.activeDocumentCellInfo.field),n=(ae(r)?JSON.parse(r):[]).filter(s=>s.Id!==t);return this.mainGrid.cellValue(this.activeDocumentCellInfo.rowIndex,this.activeDocumentCellInfo.field,n.length?JSON.stringify(n):""),n}hasPermisson(t,r){return t&r}buildTree(t){let r="__GROUP__",i=t.reduce((s,l)=>(l.Columns=[],l.GroupField=l.GroupField?`${r}${l.GroupField}`:null,s[l.Name]=l,s),{});i=t.filter(s=>s.GroupField).map(s=>s.GroupField).filter((s,l,g)=>g.indexOf(s)===l).reduce((s,l)=>{let g=l.replace(r,""),p={Name:l,Label:g,Columns:[],GroupField:i[g]&&i[g].GroupField&&i[g].GroupField!==l?i[g].GroupField:null};return s[l]=p,s},i);let n=[];for(let s in i)if(i.hasOwnProperty(s)){let l=i[s];l.GroupField?i[l.GroupField].Columns.push(l):n.push(l)}return n}renderDisplayType(t,r,i){t.type===1&&(r.cellTemplate=(n,s)=>{let l=String(s.value),g=t.data.find(p=>String(p.value)===l);g?$("<div>").css({"text-align":"center"}).attr("title",g.title).append($("<img>",{src:g.image})).appendTo(n):$("<div />").css({"text-align":"center"}).text(s.value).appendTo(n)},r.editCellTemplate=(n,s)=>{$("<div />").dxSelectBox({dataSource:t.data,displayValue:"title",itemTemplate:l=>$("<div />").css({"text-align":"center"}).attr("title",l.title).append($("<img>",{src:l.image})).appendTo(n),fieldTemplate:(l,g)=>{let p=t.data.find(T=>parseInt(T.value)===s.value),y=$("<div />").addClass("item-name"),m=$("<div />").addClass("aps-icon-editor__custom-item").append($("<img>",{src:p?p.image:""}).attr("title",p?p.title:"")).append(y);y.dxTextBox({value:"",readOnly:!0}),g.append(m)},onValueChanged:({value:l,component:g})=>{s.setValue(parseInt(l.value)),g.blur()},value:s.value!==null&&s!==void 0&&s.value.toString(),selectedItem:t.data.find(l=>parseInt(l.value)===s.value)}).appendTo(n)},r.allowSearch=!1,r.allowFiltering=!1,r.allowHeaderFiltering=!0,r.allowGrouping=!1),t.type===2&&(r.editCellTemplate=(n,s)=>{$("<div />").dxSelectBox({dataSource:t.data.map(l=>l.value).sort(),acceptCustomValue:!0,showClearButton:!0,onValueChanged:({value:l,component:g})=>{s.setValue(l||""),g.blur()},value:s.value}).appendTo(n)}),t.type===3&&(r.editCellTemplate=(n,s)=>{$("<div />").dxCheckBox({value:s.value||!1,readOnly:!this.hasPermisson(i,4),onValueChanged:l=>{s.component.cellValue(s.rowIndex,s.column.dataField,l.value)}}).appendTo(n)}),t.type===4&&(r.cellTemplate=(n,s)=>{let l=s.value,g=t.data,y=(typeof g.useStaticLink>"u"?!0:g.useStaticLink)?g.url:l;if(y){let m=g.text||l||g.url,T=$(`<a href="${y}">${m}</a>`);g.openNewTab&&T.attr("target","_blank"),T.appendTo(n)}}),t.type===5&&(r.cellTemplate=(n,s)=>{let l=new Intl.NumberFormat("en-US",{style:"currency",currency:"USD"});n.append(l.format(s.value))}),t.type===7&&(r.alignment="center",r.allowEditing=!1,r.cellTemplate=(n,s)=>{let l=this.hasPermisson(i,4),g=ae(s.value)?JSON.parse(s.value):[],p=$('<i class="fa-solid fa-image" style="font-size: 19px; cursor: pointer;"></i>');p.on("click",()=>{this.activeDocumentCellInfo={rowIndex:s.rowIndex,field:r.dataField},this.imageManager.open(g,!l)}),n.append(p),g.length&&p.css("color","#4cae4c")}),t.type===6&&(r.alignment="center",r.allowEditing=!1,r.cellTemplate=(n,s)=>{let l=this.hasPermisson(i,4),g=ae(s.value)?JSON.parse(s.value):[],p=$('<i class="fa-solid fa-file" style="font-size: 19px; cursor: pointer;"></i>');p.on("click",()=>{this.activeDocumentCellInfo={rowIndex:s.rowIndex,field:r.dataField},this.documentManager.open(g,!l)}),n.append(p),g.length&&p.css("color","#4cae4c")})}configureColumn(t){let r=t.Label||t.Name,i=t.ToolTip||r,n=t.Columns.length?{caption:r,columns:t.Columns.map(s=>this.configureColumn(s))}:{dataField:t.Name,dataType:t.Type,caption:r,headerCellTemplate:de(r,i),visible:t.IsDefaultViewField,visibleIndex:t.Order,allowFixing:!1,allowEditing:!!this.hasPermisson(t.Permissions,4),width:t.Width,hidingPriority:t.HidingOrder};if(t.DisplayType){let s=JSON.parse(t.DisplayType);if(s.type===1){let l=s.data.map(g=>({text:g.title,value:g.value}));l.splice(0,0,{text:"Blank",value:null}),n.headerFilter={dataSource:l}}this.renderDisplayType(s,n,t.Permissions)}return n}configureColumns(t){return t=t.filter(i=>this.hasPermisson(i.Permissions,1)),t=this.buildTree(t),t.map(i=>this.configureColumn(i))}createMainGrid(t){let r=t.some(l=>l.IsKeyColumn),i=this.configureColumns(t),n=vr(i),s={dataSource:this.createMainGridDataSource(t),columnResizingMode:"widget",width:"100%",editing:{allowUpdating:this.allowDataEditing&&r,allowAdding:this.allowDataEditing&&!!this.addDataUrl,allowDeleting:this.allowDataEditing&&!!this.deleteDataUrl,mode:"batch",useIcons:!0},errorRowEnabled:!0,searchPanel:{visible:!this.disableGlobalSearch},scrolling:{mode:"virtual",preloadEnabled:!0},remoteOperations:!0,pager:{visible:!1},height:this.isStandalonePage?void 0:"100%",columnChooser:{enabled:!0,mode:"dragAndDrop"},columnFixing:{enabled:!0},filterPanel:{visible:!0,texts:{createFilter:"None"}},summary:{totalItems:[{summaryType:"count",column:n}]},allowColumnResizing:!0,columnHidingEnabled:!1,hoverStateEnabled:!0,columns:i,allowColumnReordering:!0,grouping:{contextMenuEnabled:!0},groupPanel:{visible:!0},masterDetail:r?{enabled:!0,template:(l,g)=>{let p={};t.filter(y=>y.IsKeyColumn).forEach(y=>p[y.Name]=g.data[y.Name]),$("<div>").dxDataGrid({dataSource:{store:Q({loadUrl:`${this.controlLogsUrl}?key=${JSON.stringify(p)}`})},showBorders:!0,columns:[{dataField:"User",width:200},{dataField:"CreatedAt",caption:"Date",dataType:"date",format:"shortDateShortTime",width:200},{dataField:"Changes",cellTemplate:(y,m)=>{let T=m.data.Changes.map(S=>`<div class='aps-control-log'>
|
|
48
48
|
<span class='aps-control-log__field'>${S.Field}</span>
|
|
49
49
|
<span class='aps-control-log__old-value'>${S.OldValue}</span>
|
|
50
50
|
\u2192
|
|
51
51
|
<span class='aps-control-log__new-value'>${S.NewValue}</span>
|
|
52
|
-
</div>`).join("");$(`<div class='aps-control-logs'>${T}</div>`).appendTo(y)}}]}).appendTo(l)}}:void 0,onContentReady:l=>{!l.component||this.prepareFilterPanel(l.component)},onEditorPreparing:l=>{if(l.parentType!=="dataRow")return;let g=t.find(y=>y.Name===l.dataField);if(!g)return;let p=!this.hasPermisson(g.Permissions,4);if(l.editorOptions.readOnly=p,!p&&g.Type==="string"){let y=l.setValue;l.setValue=m=>{y(m.trim())}}},onCellPrepared:l=>{if(l.rowType==="data"){let g=t.find(p=>p.Name===l.column.dataField);g&&!this.hasPermisson(g.Permissions,4)&&$(l.cellElement).addClass("aps-grid__disabled-cell")}},onRowExpanded:l=>{let g=l.component.getRowIndexByKey(l.key)+1;l.component.getCellElement(g,0).parent().find(".dx-master-detail-cell").find(".dx-datagrid").first().parent().dxDataGrid("instance").refresh()}};return G(this.$container,{options:s,isFullScreen:this.isStandalonePage,setDefaultColumnWidth:!0,exportFileName:this.exportFileName,title:this.pageTitle,disableSummaryColumnDetection:!0})}createMainGridDataSource(t){return{store:Q({key:t.filter(r=>r.IsKeyColumn).map(r=>r.Name),loadUrl:this.loadDataUrl,updateUrl:this.updateDataUrl})}}prepareFilterPanel(t){let r=t.element().find(".dx-datagrid-filter-panel"),i=r.find(".dx-icon-filter"),n=r.find(".dx-datagrid-filter-panel-text");i.off("click"),n.off("click")}initRowsCountSummary(t){let r=t.getVisibleColumns().find(l=>!!l.dataField);if(!r)return;let i="RowsCount",n=t.option("summary.totalItems")||[],s=n.find(l=>l&&l.name===i);s&&s.column===r.dataField||(s?s.column=r.dataField:n.push({name:i,column:r.dataField,summaryType:"count",alignment:"left"}),this.mainGrid.option("summary.totalItems",n))}clearFilterRowAfterViewSwitching(){let t=()=>{let r={};(this.gridViewsToolbarComponent.options.gridStateManager.currentSavedGridState.columns||this.gridViewsToolbarComponent.options.owner.option("columns")).filter(n=>n.visibleIndex&&(n.filterValue||n.filterValues)).forEach(n=>r[n.visibleIndex]=n),$('td [aria-label*="Filter cell"]').filter(n=>!r[n]).val(""),this.mainGrid.off("contentReady",t)};this.mainGrid.on("contentReady",t)}};var lt=class{constructor(t){this.$container=t.$container,this.isStandalonePage=t.isStandalonePage,this.loadDataUrl=t.loadDataUrl,this.updateDataUrl=t.updateDataUrl,this.pageTitle=t.pageTitle}render(){let t=[],r=x(this.loadDataUrl,"get").then(g=>{t=g.Displays.map(m=>({Id:m.Id.toString(),Caption:m.Name}));let p=[];for(let m of g.Users){let T={UserName:m.UserName,UserId:m.Id};g.Assignments.filter(_=>_.UserId===m.Id).forEach(_=>{T[_.DisplayId]=!0}),p.push(T)}let y=[{dataField:"UserName",width:300,fixed:!0,fixedPosition:"left",allowEditing:!1},{dataField:"UserId",visible:!1}];return l.option("columns",y.concat(t.map(m=>({dataField:m.Id,caption:m.Caption,dataType:"boolean",calculateCellValue:T=>!!T[m.Id]})))),p}),i=!1,n={elementAttr:{class:"aps-display-manager"},dataSource:{store:new DevExpress.data.CustomStore({key:"UserId",loadMode:"raw",load:()=>r,update:(g,p)=>{let y=[],m=[],T=i;return i=!0,Object.keys(p).forEach(_=>{p[_]?m.push(parseInt(_)):y.push(parseInt(_))}),window.setTimeout(()=>{i=!1},0),x(this.updateDataUrl,"put",{userId:g,displaysToRemove:y,displaysToAdd:m},!T).promise()}})},height:"100%",selection:{mode:"none"},allowColumnResizing:!0,grouping:{contextMenuEnabled:!0},groupPanel:{visible:!0},remoteOperations:!1,editing:{allowUpdating:!0,mode:"cell",refreshMode:"repaint"}},s={exportFileName:"DisplayManagement",summaryColumn:"UserName"},l;this.isStandalonePage?l=$e(this.$container,n,s,this.pageTitle,"",!0):l=G(this.$container,{options:n,summaryColumn:s.summaryColumn,title:this.pageTitle,isFullScreen:!1})}};var Sr=new Map,bo=class{constructor(t,r){this.roles=[];this.$container=t.$container,this.isStandalonePage=t.isStandalonePage,this.availableRolesUrl=t.availableRolesUrl,this.loadDataUrl=t.loadDataUrl,this.updateDataUrl=t.updateDataUrl,this.pageTitle=t.pageTitle,this.isDataReadonly=!!t.isDataReadonly}render(){this.$container.addClass("aps-grid"),Promise.all([this.getAvailableRoles()]).then(t=>{this.roles=t[0],this.createMainGrid()})}async getAvailableRoles(){let t=await x(this.availableRolesUrl);return t.sort((r,i)=>{let n=Sr.get(r.Name)||9999,s=Sr.get(i.Name)||9999;return n-s}),t}createMainGrid(){let t,r={dataSource:this.createMainGridDataSource(),height:"100%",editing:{mode:"batch",allowUpdating:!0,allowAdding:!1,allowDeleting:!1,refreshMode:"repaint",useIcons:!0},repaintChangesOnly:!0,remoteOperations:!1,grouping:{allowCollapsing:!1},groupPanel:{visible:!1},selection:{mode:"none"},allowColumnReordering:!1,columnHidingEnabled:!1,hoverStateEnabled:!0,columnAutoWidth:!1,rowAlternationEnabled:!0,columnMinWidth:80,columns:this.prepareMainGridColumns([{dataField:"Name",caption:"Field",fixed:!0,fixedPosition:"left",sortOrder:"asc",width:180,allowEditing:!1},{dataField:"Label",allowEditing:!1,fixed:!0,fixedPosition:"left",width:180},{name:"Roles",caption:"Roles",allowEditing:!0,allowHiding:!1,columns:this.createRolesColumns(this.roles)},{dataField:"GroupField",visible:!1},{dataField:"Type",visible:!1},{dataField:"DataOwner",visible:!1},{dataField:"XLSScheduleLabel",visible:!1},{dataField:"DisplayType",visible:!1},{dataField:"IsDefaultViewField",visible:!1},{dataField:"IsKeyColumn",visible:!1},{dataField:"Order",visible:!1},{dataField:"Width",visible:!1},{dataField:"HidingOrder",visible:!1},{dataField:"ToolTip",visible:!1}]),onRowUpdating:n=>{if(!n.newData||!n.oldData)return;n.component.beginCustomLoading("Updating");let s=n.newData.Roles,l=n.oldData.Roles,g=(p,y=n.newData,m=n.oldData)=>{y.hasOwnProperty(p)||(y[p]=m[p])};s&&l&&Object.getOwnPropertyNames(s).forEach(p=>{let y=s[p],m=l[p];y.Id=m.Id,g("CanBeCreated",y,m),g("CanBeRead",y,m),g("CanBeUpdated",y,m),g("CanBeDeleted",y,m)}),g("Label"),g("GroupField"),g("Type"),g("DataOwner"),g("XLSScheduleLabel"),g("DisplayType"),g("IsDefaultViewField"),g("IsKeyColumn"),g("Order"),g("Width"),g("HidingOrder"),g("ToolTip")},onRowUpdated:n=>{n.component.endCustomLoading(),n.component.repaint()},onInitNewRow:n=>{n.data={Roles:this.roles.reduce((s,l)=>(s[l.Name]={Id:l.Id,Name:l.Name,CanBeRead:!0,CanBeUpdated:!1},s),{})}},onToolbarPreparing:n=>{let s=n.toolbarOptions.items;this.isDataReadonly&&s.push({location:"before",text:"The source data is read only, editing is not available"})}},i={summaryColumn:"Name"};return this.isStandalonePage?t=$e(this.$container,r,i,this.pageTitle,"",!0):t=G(this.$container,{options:r,summaryColumn:i.summaryColumn,title:this.pageTitle,isFullScreen:!1}),t}prepareMainGridColumns(t){return t.forEach(r=>{(r.allowHiding===void 0||r.allowHiding===null)&&(r.allowHiding=!1),(r.showInColumnChooser===void 0||r.showInColumnChooser===null)&&(r.showInColumnChooser=!1)}),t}createRolesColumns(t){return t.map(r=>({name:r.Name,caption:r.Name,allowHiding:!0,visible:!0,showInColumnChooser:!0,columns:[this.createRolesPermissionColumn(r.Name,"CanBeRead",{headerCellTemplate:de("Read","Read")}),this.createRolesPermissionColumn(r.Name,"CanBeUpdated",{headerCellTemplate:de("Edit",this.isDataReadonly?"The source data is read only, editing is not available":"Edit")},!0)]}))}createRolesPermissionColumn(t,r,i,n=!1){return O(A({},i),{name:`${t}_${r}`,dataField:`Roles.${t}.${r}`,allowHiding:!1,showInColumnChooser:!1,allowHeaderFiltering:!1,allowFiltering:!1,minWidth:60,allowEditing:!n||!this.isDataReadonly,editorOptions:{disabled:n&&this.isDataReadonly}})}createMainGridDataSource(){return{store:Q({loadUrl:this.loadDataUrl,updateUrl:this.updateDataUrl,key:"Name"})}}};var Ce=class{constructor(t){this.SWITCH_TO_DESIGNER_TEXT="Switch to Settings";this.SWITCH_TO_VIEWER_TEXT="Switch to Display";this.STORAGE_MODE_KEY="CDM_STORAGE_MODE_KEY";let r=`/${t.cdmReportControllerUrl}/${t.reportParams.ReportId}`;this.$rootElement=t.$container,this.reportParams=t.reportParams,this.allowEditing=t.allowEditing,this.mode=window.sessionStorage.getItem(this.getSessionKey())||"Viewer",this.controlConfiguratorOptions=this.getControlConfiguratorOptions(r,t.cdmReportControllerUrl,!!t.isDataReadonly,t.reportParams.DisableGlobalSearch),this.displayManagerOptions=this.getDisplayManagerOptions(r),this.controlDisplayOptions=this.getControlDisplayOptions(r,t.userName,t.reportParams)}init(){this.reportParams.Details&&(this.popover=te(".report-details-link",this.reportParams.Details)),this.allowEditing&&this.initSwitchModeButton(),this.renderContent()}dispose(){var t,r,i;(t=this.multiView)==null||t.dispose(),(r=this.tabPanel)==null||r.dispose(),(i=this.popover)==null||i.dispose()}refresh(){}renderContent(){this.mode==="Viewer"?this.renderDisplay():this.renderTabPanel()}getControlConfiguratorOptions(t,r,i=!1,n=!1){return{$container:null,isStandalonePage:!1,pageTitle:"",availableRolesUrl:`/${r}/AvailableRoles`,groupFieldsUrl:`${t}/AllControlFields`,loadDataUrl:`${t}/ConfiguratorData`,updateDataUrl:`${t}/ConfiguratorData`,addDataUrl:`${t}/ConfiguratorData`,deleteDataUrl:`${t}/ConfiguratorData`,updateGlobalSearchUrl:`${t}/UpdateGlobalSearch`,getReportSourceDetailsUrl:`${t}/GetReportSourceDetails`,isDataReadonly:i,disableGlobalSearch:n}}getDisplayManagerOptions(t){return{$container:null,isStandalonePage:!1,pageTitle:"",loadDataUrl:`${t}/ControlDisplayUserAssignments`,updateDataUrl:`${t}/UpdateControlDisplayUserAssignments`}}getControlDisplayOptions(t,r,i){return{$container:null,isStandalonePage:!1,pageTitle:"",exportFileName:i.Name,userConfigUrl:`${t}/FieldsPermissions`,controlLogsUrl:`${t}/GetControlLogs`,loadDataUrl:`${t}/ControlDisplayData`,updateDataUrl:`${t}/UpdateControlDisplayData`,uploadDocumentUrl:`${t}/UploadControlDisplayDocument`,downloadDocumentUrl:`${t}/DownloadControlDisplayDocument`,userName:r,disableGlobalSearch:!!i.DisableGlobalSearch,importFileOptions:i.AllowImporting?{mode:i.ImportFileMode,createTableUrl:`${t}/create-table`,addRowsUrl:`${t}/add-rows`,fileUploadUrl:`${t}/get-columns`,predefinedTable:i.FileImporterTableInfo}:void 0,gridFiltersManagerOptions:{loadDataUrl:`${t}/GetControlFilters`,insertDataUrl:`${t}/AddControlFilter`,updateDataUrl:`${t}/UpdateControlFilter`,deleteDataUrl:`${t}/RemoveControlFilter`},gridViewsManagerOptions:{loadDataUrl:`${t}/GetControlViews`,insertDataUrl:`${t}/AddControlView`,updateDataUrl:`${t}/UpdateControlView`,deleteDataUrl:`${t}/RemoveControlView`},gridDisplaysManagerOptions:{loadDataUrl:`${t}/GetControlDisplays`,insertDataUrl:`${t}/AddControlDisplay`,updateDataUrl:`${t}/UpdateControlDisplay`,deleteDataUrl:`${t}/RemoveControlDisplay`},remoteControlDisplayUserSettingsManagerLoadOptions:{loadDataUrl:`${t}/GetControlDisplayUserSettings`,updateDataUrl:`${t}/UpdateControlDisplayUserSettings`}}}initSwitchModeButton(){let t=$(".switch-mode-btn").dxButton({text:this.mode==="Viewer"?this.SWITCH_TO_DESIGNER_TEXT:this.SWITCH_TO_VIEWER_TEXT,onClick:()=>{this.mode=this.mode==="Viewer"?"Designer":"Viewer",window.sessionStorage.setItem(this.getSessionKey(),this.mode),t.option("text",this.mode==="Viewer"?this.SWITCH_TO_DESIGNER_TEXT:this.SWITCH_TO_VIEWER_TEXT),this.renderContent()}}).addClass("iszolea-md").dxButton("instance")}renderDisplay(){this.$rootElement.html("");let t=$("<div />").appendTo(this.$rootElement);this.multiView=t.dxMultiView({items:[{template:()=>{let r=new at(O(A({},this.controlDisplayOptions),{$container:$("<div />")}));return r.render(),r.$container}}]}).addClass("cdm-report__disply-grid").dxMultiView("instance"),le(this.multiView,!1)}renderTabPanel(){this.$rootElement.html("");let t=$("<div />").appendTo(this.$rootElement);this.tabPanel=this.createTabPanel(t),le(this.tabPanel,!1)}createTabPanel(t){return t.dxTabPanel({swipeEnabled:!1,showNavButtons:!0,focusStateEnabled:!1,activeStateEnabled:!1,hoverStateEnabled:!1,onSelectionChanged:r=>{setTimeout(()=>{r.component.repaint()})},items:[{title:"Configurator",template:()=>{let r=new it(O(A({},this.controlConfiguratorOptions),{$container:$("<div />")}),i=>{this.controlDisplayOptions.disableGlobalSearch=this.controlConfiguratorOptions.disableGlobalSearch=!i});return r.render(),r.$container}},{title:"Permissions",template:()=>{let r=new bo(O(A({},this.controlConfiguratorOptions),{$container:$("<div />")}),i=>{this.controlDisplayOptions.disableGlobalSearch=this.controlConfiguratorOptions.disableGlobalSearch=!i});return r.render(),r.$container}},{title:"Display Manager",template:()=>{let r=new lt(O(A({},this.displayManagerOptions),{$container:$("<div />")}));return r.render(),r.$container}}]}).addClass("cdm-report__configuration-tab-panel").dxTabPanel("instance")}getSessionKey(){return this.STORAGE_MODE_KEY+this.reportParams.ReportId}};var Io=class{get popup(){return this._popup||(this._popup=this.createPopup()),this._popup}constructor(t){this.sessionExpireTimeMs=t.sessionExpireTimeMs,this.displayDurationMs=t.displayDurationMs,this.sessionPingUrl=t.sessionPingUrl,this.logoutUrl=t.logoutUrl,this.pingSessionIfTabIsActive=this.pingSessionIfTabIsActive.bind(this)}reset(){var t;this.clearTimeoutsAndIntervals(),(t=this.popup)==null||t.hide(),this.expirationTime=this.getExpirationTime(),this.watingTimeoutId=window.setTimeout(()=>{this.showNotification()},Math.max(this.sessionExpireTimeMs-this.displayDurationMs,0)),this.pingIntervalId=window.setInterval(()=>{this.pingSessionIfTabIsActive()},60*1e3),$(document).on("visibilitychange",this.pingSessionIfTabIsActive)}dispose(){this.clearTimeoutsAndIntervals()}showNotification(){var t;(t=this.popup)==null||t.show(),this.clearTimeoutsAndIntervals(),this.updatePopupContent(),this.counterIntervalId=window.setInterval(()=>{this.updatePopupContent()},1e3)}clearTimeoutsAndIntervals(){this.watingTimeoutId&&clearTimeout(this.watingTimeoutId),this.counterIntervalId&&clearInterval(this.counterIntervalId),this.pingIntervalId&&clearInterval(this.pingIntervalId),$(document).off("visibilitychange",this.pingSessionIfTabIsActive)}getExpirationTime(){let t=new Date;return t.setMilliseconds(t.getMilliseconds()+this.sessionExpireTimeMs),t}createPopup(){return $("<div />").dxPopup({title:"Session Expiring",hideOnOutsideClick:!1,resizeEnabled:!1,showCloseButton:!1,dragEnabled:!1,maxHeight:190,maxWidth:370,visible:!1,contentTemplate:()=>(this.$textContainer=$("<span />"),this.$textContainer.append(this.getCounterText()),$("<div />").append(this.$textContainer)),toolbarItems:[{widget:"dxButton",toolbar:"bottom",location:"before",options:{type:"default",text:"Continue session",onInitialized:t=>this.continuerButton=t.component,onClick:()=>{this.refreshSession()}}},{widget:"dxButton",toolbar:"bottom",location:"before",options:{type:"default",text:"Reload page",onInitialized:t=>this.okButton=t.component,onClick:()=>{window.location.reload()}}},{widget:"dxButton",toolbar:"bottom",location:"after",options:{text:"Log Out",onInitialized:t=>this.logoutButton=t.component,onClick:()=>{this.logOut()}}}]}).appendTo($(document.body)).dxPopup("instance")}getCounterText(){let t=Math.max(this.getSecondsToExpiration(),0);if(t===0)return $("<span />").text("Your session has been expired");{let r=$("<span />").text("Your session will expire in "),i=$("<span />").addClass("session-notifier__counter").text(t.toFixed(0)),n=$("<span />").text(" seconds");return $("<span />").append(r,i,n)}}getSecondsToExpiration(){return(this.expirationTime.getTime()-new Date().getTime())/1e3}refreshSession(){this.reset(),x(this.sessionPingUrl,"GET",null,!1,{notifyError:!1}).then(t=>{t.isAuthenticated||window.location.reload()}).catch(()=>window.location.reload())}pingSessionIfTabIsActive(){document.hidden||x(this.sessionPingUrl,"GET",null,!1,{notifyError:!1}).then(t=>{t.isAuthenticated||this.setExpired()})}setExpired(){this.expirationTime=new Date,this.showNotification(),this.pingIntervalId&&clearInterval(this.pingIntervalId)}logOut(){window.location.href=this.logoutUrl}updatePopupContent(){var r;let t=this.getSecondsToExpiration()<=0;(r=this.$textContainer)==null||r.html("").append(this.getCounterText()),this.okButton.option("visible",t),this.continuerButton.option("visible",!t),this.logoutButton.option("visible",!t)}};var Ni={edit:"edit",saving:"saving",saved:"saved"},ie=Ni;var Ct=class extends J{constructor(t,r){super();this.OUTDATE_COLUMNS_FOUND_EVENT="outdated-columns-found-event";this.stateLoaded=!1;this.loadedColumns={};this.additionalColumnsSettings={};this.id=t,this.gridDataLayer=r}load(t,r){return this.gridDataLayer.getGridViewSettings(this.id).then(i=>(this.onDataLoaded(i),t&&this.checkColumnsRelevance(i.columns,r),i))}save(t,r,i){let n={};if(!t.columns)return;t.columns.forEach(l=>{let g=this.additionalColumnsSettings[l.dataField];g&&(l.caption=g.caption,l.tooltip=g.tooltip),l.dataType||(l.dataType="default"),!!l.width&&l.visible&&(n[l.visibleIndex]=l.width)});let s=JSON.stringify(t.columns);return!this.stateLoaded||s===this.lastColumnSettingsStr?null:(this.lastColumnSettingsStr=s,r&&r(),this.gridDataLayer.updateGridViewSettings(this.id,t).then(()=>{i&&i()}),n)}checkNewColumns(t){let r=[];if(t.columns){let i=t.columns.filter(n=>!this.loadedColumns[n.dataField]&&n.visible);i.length&&i.forEach(n=>{r.push(n.dataField),this.loadedColumns[n.dataField]=!0})}return r}getColumnCaptions(){return Object.keys(this.additionalColumnsSettings).map(t=>({dataField:t,caption:this.additionalColumnsSettings[t].caption}))}setColumnCaption(t,r){this.additionalColumnsSettings[t]||(this.additionalColumnsSettings[t]={caption:"",tooltip:""}),this.additionalColumnsSettings[t].caption=r}getColumnAdditionalSettings(t){return this.additionalColumnsSettings[t]}checkColumnsRelevance(t,r){this.gridDataLayer.getColumnsByReportId(this.id).then(i=>{let n={};i.forEach(l=>n[l.Name]=!0);let s=t.filter(l=>!n[l.dataField]).map(l=>l.dataField);s.length&&DevExpress.ui.dialog.confirm(`Grid settings contain some colunms which don't exist in the database table anymore:
|
|
52
|
+
</div>`).join("");$(`<div class='aps-control-logs'>${T}</div>`).appendTo(y)}}]}).appendTo(l)}}:void 0,onContentReady:l=>{!l.component||this.prepareFilterPanel(l.component)},onEditorPreparing:l=>{if(l.parentType!=="dataRow")return;let g=t.find(y=>y.Name===l.dataField);if(!g)return;let p=!this.hasPermisson(g.Permissions,4);if(l.editorOptions.readOnly=p,!p&&g.Type==="string"){let y=l.setValue;l.setValue=m=>{y(m.trim())}}},onCellPrepared:l=>{if(l.rowType==="data"){let g=t.find(p=>p.Name===l.column.dataField);g&&!this.hasPermisson(g.Permissions,4)&&$(l.cellElement).addClass("aps-grid__disabled-cell")}},onRowExpanded:l=>{let g=l.component.getRowIndexByKey(l.key)+1;l.component.getCellElement(g,0).parent().find(".dx-master-detail-cell").find(".dx-datagrid").first().parent().dxDataGrid("instance").refresh()}};return G(this.$container,{options:s,isFullScreen:this.isStandalonePage,setDefaultColumnWidth:!0,exportFileName:this.exportFileName,title:this.pageTitle,disableSummaryColumnDetection:!0})}createMainGridDataSource(t){return{store:Q({key:t.filter(r=>r.IsKeyColumn).map(r=>r.Name),loadUrl:this.loadDataUrl,updateUrl:this.updateDataUrl,deleteUrl:this.deleteDataUrl||void 0,insertUrl:this.addDataUrl||void 0,notifyError:!0})}}prepareFilterPanel(t){let r=t.element().find(".dx-datagrid-filter-panel"),i=r.find(".dx-icon-filter"),n=r.find(".dx-datagrid-filter-panel-text");i.off("click"),n.off("click")}initRowsCountSummary(t){let r=t.getVisibleColumns().find(l=>!!l.dataField);if(!r)return;let i="RowsCount",n=t.option("summary.totalItems")||[],s=n.find(l=>l&&l.name===i);s&&s.column===r.dataField||(s?s.column=r.dataField:n.push({name:i,column:r.dataField,summaryType:"count",alignment:"left"}),this.mainGrid.option("summary.totalItems",n))}clearFilterRowAfterViewSwitching(){let t=()=>{let r={};(this.gridViewsToolbarComponent.options.gridStateManager.currentSavedGridState.columns||this.gridViewsToolbarComponent.options.owner.option("columns")).filter(n=>n.visibleIndex&&(n.filterValue||n.filterValues)).forEach(n=>r[n.visibleIndex]=n),$('td [aria-label*="Filter cell"]').filter(n=>!r[n]).val(""),this.mainGrid.off("contentReady",t)};this.mainGrid.on("contentReady",t)}};var lt=class{constructor(t){this.$container=t.$container,this.isStandalonePage=t.isStandalonePage,this.loadDataUrl=t.loadDataUrl,this.updateDataUrl=t.updateDataUrl,this.pageTitle=t.pageTitle}render(){let t=[],r=x(this.loadDataUrl,"get").then(g=>{t=g.Displays.map(m=>({Id:m.Id.toString(),Caption:m.Name}));let p=[];for(let m of g.Users){let T={UserName:m.UserName,UserId:m.Id};g.Assignments.filter(_=>_.UserId===m.Id).forEach(_=>{T[_.DisplayId]=!0}),p.push(T)}let y=[{dataField:"UserName",width:300,fixed:!0,fixedPosition:"left",allowEditing:!1},{dataField:"UserId",visible:!1}];return l.option("columns",y.concat(t.map(m=>({dataField:m.Id,caption:m.Caption,dataType:"boolean",calculateCellValue:T=>!!T[m.Id]})))),p}),i=!1,n={elementAttr:{class:"aps-display-manager"},dataSource:{store:new DevExpress.data.CustomStore({key:"UserId",loadMode:"raw",load:()=>r,update:(g,p)=>{let y=[],m=[],T=i;return i=!0,Object.keys(p).forEach(_=>{p[_]?m.push(parseInt(_)):y.push(parseInt(_))}),window.setTimeout(()=>{i=!1},0),x(this.updateDataUrl,"put",{userId:g,displaysToRemove:y,displaysToAdd:m},!T).promise()}})},height:"100%",selection:{mode:"none"},allowColumnResizing:!0,grouping:{contextMenuEnabled:!0},groupPanel:{visible:!0},remoteOperations:!1,editing:{allowUpdating:!0,mode:"cell",refreshMode:"repaint"}},s={exportFileName:"DisplayManagement",summaryColumn:"UserName"},l;this.isStandalonePage?l=$e(this.$container,n,s,this.pageTitle,"",!0):l=G(this.$container,{options:n,summaryColumn:s.summaryColumn,title:this.pageTitle,isFullScreen:!1})}};var Sr=new Map,bo=class{constructor(t){this.roles=[];this.$container=t.$container,this.isStandalonePage=t.isStandalonePage,this.availableRolesUrl=t.availableRolesUrl,this.loadDataUrl=t.loadDataUrl,this.updateDataUrl=t.updateDataUrl,this.pageTitle=t.pageTitle,this.isDataReadonly=!!t.isDataReadonly}render(){this.$container.addClass("aps-grid"),Promise.all([this.getAvailableRoles()]).then(t=>{this.roles=t[0],this.createMainGrid()})}async getAvailableRoles(){let t=await x(this.availableRolesUrl);return t.sort((r,i)=>{let n=Sr.get(r.Name)||9999,s=Sr.get(i.Name)||9999;return n-s}),t}createMainGrid(){let t,r={dataSource:this.createMainGridDataSource(),height:"100%",editing:{mode:"batch",allowUpdating:!0,allowAdding:!1,allowDeleting:!1,refreshMode:"repaint",useIcons:!0},repaintChangesOnly:!0,remoteOperations:!1,grouping:{allowCollapsing:!1},groupPanel:{visible:!1},selection:{mode:"none"},allowColumnReordering:!1,columnHidingEnabled:!1,hoverStateEnabled:!0,columnAutoWidth:!1,rowAlternationEnabled:!0,columnMinWidth:80,columns:this.prepareMainGridColumns([{dataField:"Name",caption:"Field",fixed:!0,fixedPosition:"left",sortOrder:"asc",width:180,allowEditing:!1},{dataField:"Label",allowEditing:!1,fixed:!0,fixedPosition:"left",width:180},{name:"Roles",caption:"Roles",allowEditing:!0,allowHiding:!1,columns:this.createRolesColumns(this.roles)},{dataField:"GroupField",visible:!1},{dataField:"Type",visible:!1},{dataField:"DataOwner",visible:!1},{dataField:"XLSScheduleLabel",visible:!1},{dataField:"DisplayType",visible:!1},{dataField:"IsDefaultViewField",visible:!1},{dataField:"IsKeyColumn",visible:!1},{dataField:"Order",visible:!1},{dataField:"Width",visible:!1},{dataField:"HidingOrder",visible:!1},{dataField:"ToolTip",visible:!1}]),onRowUpdating:n=>{if(!n.newData||!n.oldData)return;n.component.beginCustomLoading("Updating");let s=n.newData.Roles,l=n.oldData.Roles,g=(p,y=n.newData,m=n.oldData)=>{y.hasOwnProperty(p)||(y[p]=m[p])};s&&l&&Object.getOwnPropertyNames(s).forEach(p=>{let y=s[p],m=l[p];y.Id=m.Id,g("CanBeCreated",y,m),g("CanBeRead",y,m),g("CanBeUpdated",y,m),g("CanBeDeleted",y,m)}),g("Label"),g("GroupField"),g("Type"),g("DataOwner"),g("XLSScheduleLabel"),g("DisplayType"),g("IsDefaultViewField"),g("IsKeyColumn"),g("Order"),g("Width"),g("HidingOrder"),g("ToolTip")},onRowUpdated:n=>{n.component.endCustomLoading(),n.component.repaint()},onInitNewRow:n=>{n.data={Roles:this.roles.reduce((s,l)=>(s[l.Name]={Id:l.Id,Name:l.Name,CanBeRead:!0,CanBeUpdated:!1},s),{})}},onToolbarPreparing:n=>{let s=n.toolbarOptions.items;this.isDataReadonly&&s.push({location:"before",text:"The source data is read only, editing is not available"})}},i={summaryColumn:"Name"};return this.isStandalonePage?t=$e(this.$container,r,i,this.pageTitle,"",!0):t=G(this.$container,{options:r,summaryColumn:i.summaryColumn,title:this.pageTitle,isFullScreen:!1}),t}prepareMainGridColumns(t){return t.forEach(r=>{(r.allowHiding===void 0||r.allowHiding===null)&&(r.allowHiding=!1),(r.showInColumnChooser===void 0||r.showInColumnChooser===null)&&(r.showInColumnChooser=!1)}),t}createRolesColumns(t){return t.map(r=>({name:r.Name,caption:r.Name,allowHiding:!0,visible:!0,showInColumnChooser:!0,columns:[this.createRolesPermissionColumn(r.Name,"CanBeRead",{headerCellTemplate:de("Read","Read")}),this.createRolesPermissionColumn(r.Name,"CanBeUpdated",{headerCellTemplate:de("Edit",this.isDataReadonly?"The source data is read only, editing is not available":"Edit")},!0)]}))}createRolesPermissionColumn(t,r,i,n=!1){return O(A({},i),{name:`${t}_${r}`,dataField:`Roles.${t}.${r}`,allowHiding:!1,showInColumnChooser:!1,allowHeaderFiltering:!1,allowFiltering:!1,minWidth:60,allowEditing:!n||!this.isDataReadonly,editorOptions:{disabled:n&&this.isDataReadonly}})}createMainGridDataSource(){return{store:Q({loadUrl:this.loadDataUrl,updateUrl:this.updateDataUrl,key:"Name"})}}};var Ce=class{constructor(t){this.SWITCH_TO_DESIGNER_TEXT="Switch to Settings";this.SWITCH_TO_VIEWER_TEXT="Switch to Display";this.STORAGE_MODE_KEY="CDM_STORAGE_MODE_KEY";let r=`/${t.cdmReportControllerUrl}/${t.reportParams.ReportId}`;this.$rootElement=t.$container,this.reportParams=t.reportParams,this.allowEditing=t.allowEditing,this.mode=window.sessionStorage.getItem(this.getSessionKey())||"Viewer",this.controlConfiguratorOptions=this.getControlConfiguratorOptions(r,t.cdmReportControllerUrl,!!t.isDataReadonly,t.reportParams.DisableGlobalSearch),this.displayManagerOptions=this.getDisplayManagerOptions(r),this.controlDisplayOptions=this.getControlDisplayOptions(r,t.userName,t.reportParams,t.isDataReadonly)}init(){this.reportParams.Details&&(this.popover=te(".report-details-link",this.reportParams.Details)),this.allowEditing&&this.initSwitchModeButton(),this.renderContent()}dispose(){var t,r,i;(t=this.multiView)==null||t.dispose(),(r=this.tabPanel)==null||r.dispose(),(i=this.popover)==null||i.dispose()}refresh(){}renderContent(){this.mode==="Viewer"?this.renderDisplay():this.renderTabPanel()}getControlConfiguratorOptions(t,r,i=!1,n=!1){return{$container:null,isStandalonePage:!1,pageTitle:"",availableRolesUrl:`/${r}/AvailableRoles`,groupFieldsUrl:`${t}/AllControlFields`,loadDataUrl:`${t}/ConfiguratorData`,updateDataUrl:`${t}/ConfiguratorData`,addDataUrl:`${t}/ConfiguratorData`,deleteDataUrl:`${t}/ConfiguratorData`,updateGlobalSearchUrl:`${t}/UpdateGlobalSearch`,getReportSourceDetailsUrl:`${t}/GetReportSourceDetails`,isDataReadonly:i,disableGlobalSearch:n}}getDisplayManagerOptions(t){return{$container:null,isStandalonePage:!1,pageTitle:"",loadDataUrl:`${t}/ControlDisplayUserAssignments`,updateDataUrl:`${t}/UpdateControlDisplayUserAssignments`}}getControlDisplayOptions(t,r,i,n){return{$container:null,isStandalonePage:!1,pageTitle:"",exportFileName:i.Name,allowDataEditing:!n,userConfigUrl:`${t}/FieldsPermissions`,controlLogsUrl:`${t}/GetControlLogs`,loadDataUrl:`${t}/ControlDisplayData`,updateDataUrl:`${t}/UpdateControlDisplayData`,addDataUrl:`${t}/AddControlDisplayData`,deleteDataUrl:`${t}/DeleteControlDisplayData`,uploadDocumentUrl:`${t}/UploadControlDisplayDocument`,downloadDocumentUrl:`${t}/DownloadControlDisplayDocument`,userName:r,disableGlobalSearch:!!i.DisableGlobalSearch,importFileOptions:i.AllowImporting?{mode:i.ImportFileMode,createTableUrl:`${t}/create-table`,addRowsUrl:`${t}/add-rows`,fileUploadUrl:`${t}/get-columns`,predefinedTable:i.FileImporterTableInfo}:void 0,gridFiltersManagerOptions:{loadDataUrl:`${t}/GetControlFilters`,insertDataUrl:`${t}/AddControlFilter`,updateDataUrl:`${t}/UpdateControlFilter`,deleteDataUrl:`${t}/RemoveControlFilter`},gridViewsManagerOptions:{loadDataUrl:`${t}/GetControlViews`,insertDataUrl:`${t}/AddControlView`,updateDataUrl:`${t}/UpdateControlView`,deleteDataUrl:`${t}/RemoveControlView`},gridDisplaysManagerOptions:{loadDataUrl:`${t}/GetControlDisplays`,insertDataUrl:`${t}/AddControlDisplay`,updateDataUrl:`${t}/UpdateControlDisplay`,deleteDataUrl:`${t}/RemoveControlDisplay`},remoteControlDisplayUserSettingsManagerLoadOptions:{loadDataUrl:`${t}/GetControlDisplayUserSettings`,updateDataUrl:`${t}/UpdateControlDisplayUserSettings`}}}initSwitchModeButton(){let t=$(".switch-mode-btn").dxButton({text:this.mode==="Viewer"?this.SWITCH_TO_DESIGNER_TEXT:this.SWITCH_TO_VIEWER_TEXT,onClick:()=>{this.mode=this.mode==="Viewer"?"Designer":"Viewer",window.sessionStorage.setItem(this.getSessionKey(),this.mode),t.option("text",this.mode==="Viewer"?this.SWITCH_TO_DESIGNER_TEXT:this.SWITCH_TO_VIEWER_TEXT),this.renderContent()}}).addClass("iszolea-md").dxButton("instance")}renderDisplay(){this.$rootElement.html("");let t=$("<div />").appendTo(this.$rootElement);this.multiView=t.dxMultiView({items:[{template:()=>{let r=new at(O(A({},this.controlDisplayOptions),{$container:$("<div />")}));return r.render(),r.$container}}]}).addClass("cdm-report__disply-grid").dxMultiView("instance"),le(this.multiView,!1)}renderTabPanel(){this.$rootElement.html("");let t=$("<div />").appendTo(this.$rootElement);this.tabPanel=this.createTabPanel(t),le(this.tabPanel,!1)}createTabPanel(t){return t.dxTabPanel({swipeEnabled:!1,showNavButtons:!0,focusStateEnabled:!1,activeStateEnabled:!1,hoverStateEnabled:!1,onSelectionChanged:r=>{setTimeout(()=>{r.component.repaint()})},items:[{title:"Configurator",template:()=>{let r=new it(O(A({},this.controlConfiguratorOptions),{$container:$("<div />")}),i=>{this.controlDisplayOptions.disableGlobalSearch=this.controlConfiguratorOptions.disableGlobalSearch=!i});return r.render(),r.$container}},{title:"Permissions",template:()=>{let r=new bo(O(A({},this.controlConfiguratorOptions),{$container:$("<div />")}));return r.render(),r.$container}},{title:"Display Manager",template:()=>{let r=new lt(O(A({},this.displayManagerOptions),{$container:$("<div />")}));return r.render(),r.$container}}]}).addClass("cdm-report__configuration-tab-panel").dxTabPanel("instance")}getSessionKey(){return this.STORAGE_MODE_KEY+this.reportParams.ReportId}};var Io=class{get popup(){return this._popup||(this._popup=this.createPopup()),this._popup}constructor(t){this.sessionExpireTimeMs=t.sessionExpireTimeMs,this.displayDurationMs=t.displayDurationMs,this.sessionPingUrl=t.sessionPingUrl,this.logoutUrl=t.logoutUrl,this.pingSessionIfTabIsActive=this.pingSessionIfTabIsActive.bind(this)}reset(){var t;this.clearTimeoutsAndIntervals(),(t=this.popup)==null||t.hide(),this.expirationTime=this.getExpirationTime(),this.watingTimeoutId=window.setTimeout(()=>{this.showNotification()},Math.max(this.sessionExpireTimeMs-this.displayDurationMs,0)),this.pingIntervalId=window.setInterval(()=>{this.pingSessionIfTabIsActive()},60*1e3),$(document).on("visibilitychange",this.pingSessionIfTabIsActive)}dispose(){this.clearTimeoutsAndIntervals()}showNotification(){var t;(t=this.popup)==null||t.show(),this.clearTimeoutsAndIntervals(),this.updatePopupContent(),this.counterIntervalId=window.setInterval(()=>{this.updatePopupContent()},1e3)}clearTimeoutsAndIntervals(){this.watingTimeoutId&&clearTimeout(this.watingTimeoutId),this.counterIntervalId&&clearInterval(this.counterIntervalId),this.pingIntervalId&&clearInterval(this.pingIntervalId),$(document).off("visibilitychange",this.pingSessionIfTabIsActive)}getExpirationTime(){let t=new Date;return t.setMilliseconds(t.getMilliseconds()+this.sessionExpireTimeMs),t}createPopup(){return $("<div />").dxPopup({title:"Session Expiring",hideOnOutsideClick:!1,resizeEnabled:!1,showCloseButton:!1,dragEnabled:!1,maxHeight:190,maxWidth:370,visible:!1,contentTemplate:()=>(this.$textContainer=$("<span />"),this.$textContainer.append(this.getCounterText()),$("<div />").append(this.$textContainer)),toolbarItems:[{widget:"dxButton",toolbar:"bottom",location:"before",options:{type:"default",text:"Continue session",onInitialized:t=>this.continuerButton=t.component,onClick:()=>{this.refreshSession()}}},{widget:"dxButton",toolbar:"bottom",location:"before",options:{type:"default",text:"Reload page",onInitialized:t=>this.okButton=t.component,onClick:()=>{window.location.reload()}}},{widget:"dxButton",toolbar:"bottom",location:"after",options:{text:"Log Out",onInitialized:t=>this.logoutButton=t.component,onClick:()=>{this.logOut()}}}]}).appendTo($(document.body)).dxPopup("instance")}getCounterText(){let t=Math.max(this.getSecondsToExpiration(),0);if(t===0)return $("<span />").text("Your session has been expired");{let r=$("<span />").text("Your session will expire in "),i=$("<span />").addClass("session-notifier__counter").text(t.toFixed(0)),n=$("<span />").text(" seconds");return $("<span />").append(r,i,n)}}getSecondsToExpiration(){return(this.expirationTime.getTime()-new Date().getTime())/1e3}refreshSession(){this.reset(),x(this.sessionPingUrl,"GET",null,!1,{notifyError:!1}).then(t=>{t.isAuthenticated||window.location.reload()}).catch(()=>window.location.reload())}pingSessionIfTabIsActive(){document.hidden||x(this.sessionPingUrl,"GET",null,!1,{notifyError:!1}).then(t=>{t.isAuthenticated||this.setExpired()})}setExpired(){this.expirationTime=new Date,this.showNotification(),this.pingIntervalId&&clearInterval(this.pingIntervalId)}logOut(){window.location.href=this.logoutUrl}updatePopupContent(){var r;let t=this.getSecondsToExpiration()<=0;(r=this.$textContainer)==null||r.html("").append(this.getCounterText()),this.okButton.option("visible",t),this.continuerButton.option("visible",!t),this.logoutButton.option("visible",!t)}};var Ni={edit:"edit",saving:"saving",saved:"saved"},ie=Ni;var Ct=class extends J{constructor(t,r){super();this.OUTDATE_COLUMNS_FOUND_EVENT="outdated-columns-found-event";this.stateLoaded=!1;this.loadedColumns={};this.additionalColumnsSettings={};this.id=t,this.gridDataLayer=r}load(t,r){return this.gridDataLayer.getGridViewSettings(this.id).then(i=>(this.onDataLoaded(i),t&&this.checkColumnsRelevance(i.columns,r),i))}save(t,r,i){let n={};if(!t.columns)return;t.columns.forEach(l=>{let g=this.additionalColumnsSettings[l.dataField];g&&(l.caption=g.caption,l.tooltip=g.tooltip),l.dataType||(l.dataType="default"),!!l.width&&l.visible&&(n[l.visibleIndex]=l.width)});let s=JSON.stringify(t.columns);return!this.stateLoaded||s===this.lastColumnSettingsStr?null:(this.lastColumnSettingsStr=s,r&&r(),this.gridDataLayer.updateGridViewSettings(this.id,t).then(()=>{i&&i()}),n)}checkNewColumns(t){let r=[];if(t.columns){let i=t.columns.filter(n=>!this.loadedColumns[n.dataField]&&n.visible);i.length&&i.forEach(n=>{r.push(n.dataField),this.loadedColumns[n.dataField]=!0})}return r}getColumnCaptions(){return Object.keys(this.additionalColumnsSettings).map(t=>({dataField:t,caption:this.additionalColumnsSettings[t].caption}))}setColumnCaption(t,r){this.additionalColumnsSettings[t]||(this.additionalColumnsSettings[t]={caption:"",tooltip:""}),this.additionalColumnsSettings[t].caption=r}getColumnAdditionalSettings(t){return this.additionalColumnsSettings[t]}checkColumnsRelevance(t,r){this.gridDataLayer.getColumnsByReportId(this.id).then(i=>{let n={};i.forEach(l=>n[l.Name]=!0);let s=t.filter(l=>!n[l.dataField]).map(l=>l.dataField);s.length&&DevExpress.ui.dialog.confirm(`Grid settings contain some colunms which don't exist in the database table anymore:
|
|
53
53
|
|
|
54
54
|
'${s.join(", ")}'.
|
|
55
55
|
|
|
@@ -13,6 +13,8 @@ export interface IControlDisplayOptions {
|
|
|
13
13
|
controlLogsUrl: string;
|
|
14
14
|
loadDataUrl: string;
|
|
15
15
|
updateDataUrl: string;
|
|
16
|
+
addDataUrl: string;
|
|
17
|
+
deleteDataUrl: string;
|
|
16
18
|
uploadDocumentUrl: string;
|
|
17
19
|
downloadDocumentUrl: string;
|
|
18
20
|
gridFiltersManagerOptions: IGridFiltersManagerOptions;
|
|
@@ -21,6 +23,7 @@ export interface IControlDisplayOptions {
|
|
|
21
23
|
remoteControlDisplayUserSettingsManagerLoadOptions: IRemoteControlDisplayUserSettingsManagerLoadOptions;
|
|
22
24
|
importFileOptions?: IFileImporterOptions;
|
|
23
25
|
disableGlobalSearch: boolean;
|
|
26
|
+
allowDataEditing: boolean;
|
|
24
27
|
}
|
|
25
28
|
export declare class ControlDisplay {
|
|
26
29
|
readonly $container: JQuery;
|
|
@@ -32,12 +35,15 @@ export declare class ControlDisplay {
|
|
|
32
35
|
private readonly controlLogsUrl;
|
|
33
36
|
private readonly loadDataUrl;
|
|
34
37
|
private readonly updateDataUrl;
|
|
38
|
+
private readonly addDataUrl;
|
|
39
|
+
private readonly deleteDataUrl;
|
|
35
40
|
private readonly gridFiltersManagerOptions;
|
|
36
41
|
private readonly gridViewsManagerOptions;
|
|
37
42
|
private readonly gridDisplaysManagerOptions;
|
|
38
43
|
private readonly remoteControlDisplayUserSettingsManagerLoadOptions;
|
|
39
44
|
private readonly importFileOptions;
|
|
40
45
|
private readonly disableGlobalSearch;
|
|
46
|
+
private readonly allowDataEditing;
|
|
41
47
|
private mainGrid;
|
|
42
48
|
private gridViewsToolbarComponent;
|
|
43
49
|
private gridFiltersToolbarComponent;
|
|
@@ -8,7 +8,7 @@ export declare class PermissionsConfigurator {
|
|
|
8
8
|
private readonly loadDataUrl;
|
|
9
9
|
private readonly updateDataUrl;
|
|
10
10
|
private roles;
|
|
11
|
-
constructor(options: IControlConfiguratorOptions
|
|
11
|
+
constructor(options: IControlConfiguratorOptions);
|
|
12
12
|
render(): void;
|
|
13
13
|
private getAvailableRoles;
|
|
14
14
|
private createMainGrid;
|