iszolea-ui 1.2.86-pbi-26875.1 → 1.2.86-pbi-26875.2

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.
Files changed (2) hide show
  1. package/dist/js/index.js +2 -2
  2. package/package.json +5 -2
package/dist/js/index.js CHANGED
@@ -22,7 +22,7 @@
22
22
  <div class="image-manager__meta-data"></div>
23
23
  </div>
24
24
  </div>
25
- `)}initUploader(r){return $(".image-manager__uploader",this.$content).dxFileUploader({accept:"image/*",multiple:!0,showFileList:!1,visible:!r,uploadMode:"useForm",onValueChanged:i=>{this.emit(this.ON_UPLOADED,i.value)}}).dxFileUploader("instance")}initList(r){return $(".image-manager__items",this.$content).dxList({dataSource:[],displayExpr:"Name",keyExpr:"Id",selectionMode:"single",activeStateEnabled:!1,focusStateEnabled:!1,noDataText:"",allowItemDeleting:!r,itemDragging:{allowReordering:!0},onItemDeleting:i=>{this.emit(this.ON_DELETED,i.itemData.Id)},onSelectionChanged:i=>{this.selectedIndex=i.component.option("selectedIndex")},onItemReordered:i=>{let n=[...this.images],s=n[i.fromIndex];n.splice(i.fromIndex,1),n.splice(i.toIndex,0,s),this.images=n,this.selectedIndex===i.fromIndex&&(this.selectedIndex=i.toIndex),this.emit(this.ON_REORDERED)}}).dxList("instance")}initGallery(){return $(".image-manager__gallery",this.$content).dxGallery({height:"100%",dataSource:[],onSelectionChanged:r=>{this.selectedIndex=r.component.option("selectedIndex")}}).dxGallery("instance")}open(r={images:[],metaData:[]},i=!1){var n;this.$content=this.initMarkup(),(n=r.metaData)!=null&&n.length&&(this.metaData=r.metaData),this.list=this.initList(i),this.uploader=this.initUploader(i),this.gallery=this.initGallery(),this.dialog=K({title:"Image Manager",height:this.settings.height,width:this.settings.width},this.$content,{text:"Close",onClick:s=>s()},void 0),this.images=r.images}close(){var r;(r=this.dialog)==null||r.close()}set metaData(r){this.metaDataItems=r;let i=this.metaDataItems.map(n=>$(`
25
+ `)}initUploader(r){return $(".image-manager__uploader",this.$content).dxFileUploader({accept:"image/*",multiple:!0,showFileList:!1,visible:!r,uploadMode:"useForm",onValueChanged:i=>{this.emit(this.ON_UPLOADED,i.value)}}).dxFileUploader("instance")}initList(r){return $(".image-manager__items",this.$content).dxList({dataSource:[],displayExpr:"Name",keyExpr:"Id",selectionMode:"single",activeStateEnabled:!1,focusStateEnabled:!1,noDataText:"",allowItemDeleting:!r,itemDragging:{allowReordering:!0},onItemDeleting:i=>{i.cancel=!0,this.emit(this.ON_DELETED,i.itemData.Id)},onSelectionChanged:i=>{this.selectedIndex=i.component.option("selectedIndex")},onItemReordered:i=>{let n=[...this.images],s=n[i.fromIndex];n.splice(i.fromIndex,1),n.splice(i.toIndex,0,s),this.images=n,this.selectedIndex===i.fromIndex&&(this.selectedIndex=i.toIndex),this.emit(this.ON_REORDERED)}}).dxList("instance")}initGallery(){return $(".image-manager__gallery",this.$content).dxGallery({height:"100%",dataSource:[],onSelectionChanged:r=>{this.selectedIndex=r.component.option("selectedIndex")}}).dxGallery("instance")}open(r={images:[],metaData:[]},i=!1){var n;this.$content=this.initMarkup(),(n=r.metaData)!=null&&n.length&&(this.metaData=r.metaData),this.list=this.initList(i),this.uploader=this.initUploader(i),this.gallery=this.initGallery(),this.dialog=K({title:"Image Manager",height:this.settings.height,width:this.settings.width},this.$content,{text:"Close",onClick:s=>s()},void 0),this.images=r.images}close(){var r;(r=this.dialog)==null||r.close()}set metaData(r){this.metaDataItems=r;let i=this.metaDataItems.map(n=>$(`
26
26
  <div class="image-gallery-meta-data-row">
27
27
  <div class="image-gallery-meta-data-row__name">${n.name}:</div>
28
28
  <div class="image-gallery-meta-data-row__value">${n.value}</div>
@@ -52,7 +52,7 @@ to disable the global search function and allow filtering by column only.`).dxPo
52
52
  ${this.isDataReadonly?'<i title="The source data is read only, editing is not available" class="fa-solid fa-circle-info"></i>':""}
53
53
  </div>
54
54
  </div>
55
- `);s.push({location:"before",template:()=>I})}},onEditorPreparing:n=>{n.parentType==="dataRow"&&n.dataField==="Name"&&(n.editorOptions.disabled=!n.row.isNewRow||!!n.row.data.IsSystemColumn)},onInitNewRow:n=>{n.data={IsKeyColumn:!1,IsDefaultViewField:!0,IsExported:!0,IsSystemColumn:!1,IsIdentity:!1,IsComputed:!1,IsNullable:!0,HasDefaultValue:!1,...this.systemFieldPredefinedData||{}},this.systemFieldPredefinedData=null},onRowRemoved:n=>{this.fields=this.fields.filter(s=>s!==n.data.Name)},onRowInserted:n=>{this.fields.push(n.data.Name)}},i={summaryColumn:"Name"};return this.isStandalonePage?t=Je(this.$container,r,i,this.pageTitle,"",!0):t=B(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:Pt({loadUrl:this.loadDataUrl,key:"Name",notifyError:!1})}}};DevExpress.ui.dxDataGrid.registerModule("columnChooserSorting",{extenders:{controllers:{columns(o){return class extends o{getChooserColumns(r){return(super.getChooserColumns(r)||[]).slice().sort((n,s)=>{let l=(n==null?void 0:n.caption)||"",g=(s==null?void 0:s.caption)||"";return l.localeCompare(g)})}}}}}});var Cr=Ct(Do());var Hi=(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},Qe=o=>{let t=null,r=null;return function(...i){return Hi(t,i)||(r=o(...i)),t=i,r}};var te=class te{constructor(t){this._currentViewId=te.defaultControlDisplayView.id;this.views=te.defaultViews;this.getViewByIdInternal=t=>this.views&&this.views.find(r=>r.id===t);this.getViewById=Qe(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===te.defaultViews&&await this.loadViews(),this.views}updateCurrentView(t){return this.updateView(this.currentView.id,t)}async createNewView(t,r,i){await this.getViews();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===te.defaultControlDisplayView.id)return!1;let i=this.getViewById(t);if(!i)return!1;let n={...i,...r},s=this.mapViewModelToDto(n);return await x(this.updateDataUrl,"PUT",s),await this.loadViews(),!0}async deleteView(t){return t===te.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(te.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=Qe(this.getViewByIdInternal)}};te.defaultControlDisplayView={id:0,name:"Default",gridState:null,isGlobal:!1},te.defaultViews=[te.defaultControlDisplayView];var H=te;var zt=class{constructor(t){var r;this.options=t,this.currentSavedGridState=t.initialState,this.imagePreviewSizeMap=((r=t.initialState)==null?void 0:r.imagePreviewSizeMap)??{},this.options.owner.option("stateStoring",{enabled:!0,type:"custom",customLoad:()=>Promise.resolve(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.imagePreviewSizeMap=this.imagePreviewSizeMap,t}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=>{this.imagePreviewSizeMap=(t==null?void 0:t.imagePreviewSizeMap)||{};let n=r?void 0:this.options.owner.filter();this.options.owner.beginUpdate(),this.options.owner.clearFilter("filterValue"),this.options.owner.state(t);let s=this.options.owner.getVisibleColumns().filter(g=>!g.type);s[0]&&s[0].dataField&&this.options.owner.option("summary",{totalItems:[{column:s[0].dataField,summaryType:"count"}]}),n&&this.options.owner.filter(n),this.options.owner.endUpdate();let l=()=>{this.save(),i(),this.options.owner.off("contentReady",l)};this.options.owner.on("contentReady",l)})}save(){this.currentSavedGridState=this.currentUnsavedGridState}reset(){this.options.owner.state(this.currentSavedGridState)}setFieldPreviewSize(t,r){this.imagePreviewSizeMap[t]=r}getFieldPreviewSize(t){return this.imagePreviewSizeMap[t]}};var Kt=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={...t,gridStateManager:t.gridStateManager?t.gridStateManager:new zt({owner:t.owner,initialState:null}),gridViewsManager:t.gridViewsManager?t.gridViewsManager:new H(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===H.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:[H.defaultControlDisplayView],value:H.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!==H.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!==H.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}),O("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),O("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!==H.defaultControlDisplayView.id&&await this.applyView(H.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===H.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 Xe=class{constructor(t){this.getFilterByIdInternal=t=>this.filters&&this.filters.find(r=>r.id===t);this.getFilterById=Qe(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){await this.getFilters();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={...i,...r},s=this.mapFilterModelToDto(n);return 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=Qe(this.getFilterByIdInternal)}};var Yt=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={...t,gridFiltersManager:t.gridFiltersManager?t.gridFiltersManager:new Xe(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:()=>{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,T=S=>{let h=S.split(", "),I=DevExpress.localization.parseDate(h[1],g)||null;if(I){let E=h[0].split(":");return I.setHours(parseInt(E[0])),I.setMinutes(parseInt(E[1])),I}else return null};s.format=y,s.editorTemplate=S=>$("<div />").dxDateBox({displayFormat:y,type:l?"datetime":"date",width:150,onValueChanged:({value:h})=>{S.setValue(DevExpress.localization.formatDate(h,y))},value:(l?T(S.value):DevExpress.localization.parseDate(S.value,y))||null}),s.filterOperations=["=","<>","<",">","<=",">=","isblank","isnotblank"],s.calculateFilterExpression=function(S){let h=[t,...r];return h[0]&&(l?h[0]=T(h[0]):h[0]=DevExpress.localization.parseDate(S,y)||null),this.defaultCalculateFilterExpression(...h)}}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),O("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})||(O("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 Ze=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:()=>n("Unknown error")})})}};var Ue=class Ue extends G{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",this.tableSelectorProperties=t.tableSelectorProperties}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:ce({loadUrl:this.getTablesListUrl,loadParams:{contextName:"",tablesOnly:!0,isWarehouseContext:!0},loadMethod:"post",notifyError:!1}),paginate:!1}),searchEnabled:!0,...this.tableSelectorProperties},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 Ze({$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=>{O(`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=B($("<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||O("Select file with data",!1);let i=r.items();if(!this.areColumnsValid(i))O("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(),O(`The table [${n.schema}].[${n.table}] has been created`,!0),this.emit(Ue.TABLE_UPDATED_EVENT),this.emit(Ue.TABLE_CREATED_EVENT,n)):O("The table has not been created",!1)}).catch(s=>{O(`Table creating error: ${s}`,!1)}).finally(()=>{this.dataGrid.endCustomLoading()})}}}addRowsToTable(){if(this.form.validate().isValid){let r=this.dataGrid.getDataSource();r||O("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(),O(`The table ${n.table} has been updated`,!0),this.emit(Ue.TABLE_UPDATED_EVENT)):O("The table has not been updated",!1)}).catch(s=>{O(`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)}};Ue.TABLE_UPDATED_EVENT="file-importer-table-updated-event",Ue.TABLE_CREATED_EVENT="file-importer-table-created-event";var Pe=Ue;var Jt=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 Pe({$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(Pe.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 qt=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 Qt=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={...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 Xt=class{constructor(t){this.defaultUserSettings={defaultFilterId:void 0,defaultViewId:H.defaultControlDisplayView.id};this.isLatestLoadedUserSettingsExpired=!0;this.options={...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)}},St=class St extends Xt{async loadUserSettings(){let t=localStorage.getItem(St.userSettingsStorageKey);return t?JSON.parse(t):this.defaultUserSettings}async updateUserSettingsInternal(t){let i={...await this.getUserSettings(),...t};return localStorage.setItem(St.userSettingsStorageKey,JSON.stringify(i)),i}};St.userSettingsStorageKey="aps:control-display:user-settings";var Dr=St,Zt=class extends Xt{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 i={...await this.getUserSettings(),...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 _r(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 Ne=class{constructor(t){this.gridGetter=t,this.privateContructor()}get grid(){return this.gridGetter()}getServiceColumns(){return[]}getRowUpdatingHandler(){}dataRowCellPrepared(t,r,i){}};function Vo(o){return typeof o=="string"?o:JSON.stringify(o)}var bt=class{constructor(){this.invalidCells={}}addInvalidCell(t,r){let i=Vo(t);this.invalidCells[i]||(this.invalidCells[i]={}),this.invalidCells[i][r]=!0}markValid(t,r){let i=Vo(t);this.invalidCells[i]&&delete this.invalidCells[i][r]}isValid(t,r){let i=Vo(t);return!this.invalidCells[i]||!this.invalidCells[i][r]}reset(){this.invalidCells={}}};var eo=class extends G{constructor(r){super();this.REQUEST_STATUS_UPDATED_EVENT="REQUEST_STATUS_UPDATED";this.pendingChanges=[];this.isRequestPending=!1;this.updateUrl=r}push(r,i=!1){this.emit(this.REQUEST_STATUS_UPDATED_EVENT,{dataChange:[r],status:0}),r.isSeparatedRequest=i,this.isRequestPending?this.pendingChanges.push(r):this.sendRequest([r])}async sendRequest(r){if(r.length===0)return;this.isRequestPending=!0,this.emit(this.REQUEST_STATUS_UPDATED_EVENT,{dataChange:r,status:1});let i=r.map(({gridKey:n,...s})=>s);try{let n=await x(this.updateUrl,"POST",JSON.stringify(i),!1,{contentType:"application/json"}),s=n.filter(l=>l.isSuccess).map(l=>({...l,dataChange:this.attachGridKey(l.dataChange,r)}));s.length&&this.emit(this.REQUEST_STATUS_UPDATED_EVENT,{status:2,dataChange:s.map(l=>l.dataChange),requestsInQueue:this.pendingChanges.length>0}),n.filter(l=>!l.isSuccess).forEach((l=>{let g=this.attachGridKey(l.dataChange,r);this.emit(this.REQUEST_STATUS_UPDATED_EVENT,{status:3,dataChange:[g],requestsInQueue:this.pendingChanges.length>0,error:l.error})}))}catch(n){this.emit(this.REQUEST_STATUS_UPDATED_EVENT,{status:3,dataChange:r,requestsInQueue:this.pendingChanges.length>0,error:n})}finally{this.isRequestPending=!1;let n=[];for(;this.pendingChanges.length;){if(this.pendingChanges[0].isSeparatedRequest){n.length||(n.push(this.pendingChanges.shift()),this.pendingChanges.shift());break}n.push(this.pendingChanges.shift())}n.length&&this.sendRequest(n)}}attachGridKey(r,i){if(!r||r.gridKey!==void 0)return r;let n=i.find(s=>s.type!==r.type?!1:this.areKeysEqual(s.key,r.key));return n&&n.gridKey!==void 0?{...r,gridKey:n.gridKey}:r}areKeysEqual(r,i){if(r===i)return!0;if(!r||!i||typeof r!="object"||typeof i!="object")return!1;try{return JSON.stringify(r)===JSON.stringify(i)}catch{return!1}}};function ko(){let o=new Date().getTime(),t=typeof performance<"u"&&performance.now&&performance.now()*1e3||0;return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(r){let i=Math.random()*16;return o>0?(i=(o+i)%16|0,o=Math.floor(o/16)):(i=(t+i)%16|0,t=Math.floor(t/16)),(r==="x"?i:i&3|8).toString(16)})}var Wi=(o,t)=>{var i;if(t===null||typeof t!="object"){let n=o.getRowIndexByKey(t),s=o.getVisibleRows();return n>=0?(i=s[n])==null?void 0:i.data:void 0}return o.getDataSource().items().find(n=>{for(let s in t)if(n[s]!==t[s])return!1;return!0})},et="isoz-uuid",to="isoz-updating-error",Et=class extends Ne{constructor(r,i,n){super(r);this.editValidationTracker=new bt;this.pendingInsertPromises=[];this.requestQueue=new eo(i),this.setupRequestQueue(n)}setupRequestQueue(r){let i=null,n=null,s=null,l=()=>{i!==null&&(window.clearTimeout(i),i=null)},g=()=>{n=null,s=null},p=(h,I)=>{n=typeof Date.now=="function"?Date.now()+h:h;let E=()=>{n=null,s=null,I()};s=E;let m=setTimeout,v=h>=4e3&&typeof m.clock<"u";i=window.setTimeout(()=>{if(i=null,v){v=!1,n!==null&&(n+=h);return}E()},h)},y=()=>{if(n===null)return;if((typeof Date.now=="function"?Date.now():0)>=n){let I=s;g(),l(),I==null||I()}},T=r.html.bind(r);r.__inlineEditingManagerPatched||(r.__inlineEditingManagerPatched=!0,r.html=(h=>h===void 0?(y(),T()):(n=null,s=null,T(h))));let S=(h,I)=>{let E=()=>{let m=this.grid.getRowIndexByKey(I);if(m===-1)return!1;let u=this.grid.getRowElement(m);return u?(h==="updating"&&u.addClass("saving"),h==="updated"?(u.removeClass("saving").addClass("saved"),u.css({opacity:"",pointerEvents:""}),typeof window<"u"&&typeof window.setTimeout=="function"?window.setTimeout(()=>u.removeClass("saved"),1e3):u.removeClass("saved"),!0):(h==="failed"&&(u.removeClass("saving saved"),u.css({opacity:"",pointerEvents:""})),!0)):!1};!E()&&typeof window<"u"&&typeof window.setTimeout=="function"&&window.setTimeout(()=>E())};this.requestQueue.on(this.requestQueue.REQUEST_STATUS_UPDATED_EVENT,async h=>{switch(h.status){case 0:h.dataChange.forEach(E=>{E.type==="update"&&S("updating",E.gridKey??E.key)});break;case 1:l(),g(),r.html("<i class='dx-icon-refresh'></i> Saving...");break;case 2:l(),h.requestsInQueue||(r.html("<i class='dx-icon-floppy'></i> Saved"),p(3e3,()=>r.html(""))),h.dataChange.forEach(E=>{if(E.type==="update"&&S("updated",E.gridKey??E.key),E.type==="insert"){let m=this.pendingInsertPromises.shift();m&&m.resolve(E.data)}});break;case 3:l(),g();let I=`<i class='dx-icon-warning'></i> ${h.error||"Failed to save"}`;r.html(I),p(5e3,()=>{r.html("")}),h.dataChange.forEach(E=>{if(E.type==="insert"){let m=this.pendingInsertPromises.shift();m&&m.reject(h.error)}if(E.type==="update"){let m=E.data[et];if(m){let u=this.grid.getVisibleRows();for(let v=0;v<u.length;v++)if(u[v].data[et]===m){let D=h.error,w=v,_=Object.keys(E.data).find(A=>A!==et);this.grid.cellValue(v,to,JSON.stringify({errMsg:D,rowIndex:w,editingField:_})),this.grid.saveEditData();let C=this.grid.getCellElement(w,_);C!=null&&C.addClass&&C.addClass("aps-grid__editing-failed");break}}S("failed",E.gridKey??E.key)}E.type==="remove"&&(S("failed",E.gridKey??E.key),typeof this.grid.refresh=="function"&&this.grid.refresh())});break}})}privateContructor(){}createDataSource(r){return this.keyExpr=r.key(),{store:new DevExpress.data.CustomStore({key:r.key(),load:i=>r.load(i),byKey:(i,n)=>r.byKey(i,n),update:(i,n)=>new Promise((s,l)=>{if(n[to]){try{let{errMsg:T,rowIndex:S,editingField:h}=JSON.parse(n[to]);l(T);let I=this.grid.getKeyByRowIndex(S);I&&this.editValidationTracker.addInvalidCell(I,h);let E=this.grid.getCellElement(S,h);E!=null&&E.addClass&&E.addClass("aps-grid__editing-failed")}catch(T){l(T)}return}let g=this.getGridKey(i),p=Wi(this.grid,g);Object.keys(n).forEach(T=>{this.editValidationTracker.markValid(g,T)});let y=$.extend(p||{},n);s(y),this.requestQueue.push({key:this.getRequestKey(i),gridKey:g,type:"update",data:n})}),insert:i=>new Promise((n,s)=>{this.pendingInsertPromises.push({resolve:n,reject:s}),this.requestQueue.push({type:"insert",data:i})}),remove:i=>new Promise(n=>{n(),this.requestQueue.push({type:"remove",key:this.getRequestKey(i),gridKey:this.getGridKey(i)})}),onLoaded:()=>{this.editValidationTracker.reset()}})}}getServiceColumns(){return[{visible:!1,dataField:et},{visible:!1,dataField:to}]}getRowUpdatingHandler(){return r=>{let i=r.component.getRowIndexByKey(r.key),n=ko();r.component.getVisibleRows()[i].data[et]=n,r.newData[et]=n}}dataRowCellPrepared(r,i,n){this.editValidationTracker.isValid(r,i)||n.addClass("aps-grid__editing-failed")}getRequestKey(r){return this.keyExpr?Array.isArray(this.keyExpr)?r&&typeof r=="object"?r:this.keyExpr.reduce((i,n)=>(i[n]=r[n],i),{}):r&&typeof r=="object"?this.keyExpr in r?{[this.keyExpr]:r[this.keyExpr]}:"key"in r?{[this.keyExpr]:r.key}:{[this.keyExpr]:r}:{[this.keyExpr]:r}:r}getGridKey(r){if(!this.keyExpr||Array.isArray(this.keyExpr))return r;if(r&&typeof r=="object"){if(this.keyExpr in r)return r[this.keyExpr];if("key"in r)return r.key}return r}};var Tt=class extends Ne{createDataSource(t){return{store:t}}privateContructor(){}};var zi={1:"string",2:"string",8:"string",3:"string",4:"string",5:"number",6:"string",7:"string",10001:"string",10002:"number",10003:"number",10004:"boolean",10005:"datetime",10006:"date"},tt=class{constructor(t){this.editingMode=2;this.fieldRefDataDict={};this.tryParseJson=t=>{try{return JSON.parse(t.toString())}catch{return}};this.onViewApplied=()=>{this.clearFilterRowAfterViewSwitching()};this.$container=t.$container,this.$savingIndicator=t.$savingIndicator,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.editingMode=t.enableInlineEditing?2:1,this.allowDataEditing=t.allowDataEditing,this.getReferencedDataUrl=t.getReferencedDataUrl,this.asyncSummaryLoad=t.asyncSummaryLoad,this.editingManager=this.editingMode===2?new Et(()=>this.mainGrid,t.batchUpdateDataUrl,this.$savingIndicator):new Tt(()=>this.mainGrid),this.imageManager=new Ae,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.imageManager.onReordered(()=>this.reorderImagesHandler(this.imageManager.images)),this.documentManager=new Re({width:550,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.onOpen(r=>{window.open(`${this.downloadDocumentUrl}?name=${r}`,"_blank")}),this.documentManager.onDownload(r=>{window.open(r,"_blank")}),this.imageGallery=new Me,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()}async render(){this.showLoader("Loading...");let t=await x(this.userConfigUrl),i=t.FieldsConfiguration.filter(p=>{let y=p.DisplayType?JSON.parse(p.DisplayType):null;return(y==null?void 0:y.type)===8}).map(p=>p.Name).map(p=>x(`${this.getReferencedDataUrl}?field=${p}`).then(y=>this.fieldRefDataDict[p]=y));await Promise.all(i),this.hideLoader();let n=new Xe(this.gridFiltersManagerOptions),s=new H(this.gridViewsManagerOptions),l=new qt(this.gridDisplaysManagerOptions);this.mainGrid=this.createMainGrid(t.FieldsConfiguration,t.CanBeCreated,t.CanBeDeleted);let g=t.CanCreateDisplays&&t.CanCreateViews&&t.CanCreateFilters;(g||t.CanApplayDisplays)&&(this.gridDisplaysToolbarComponent=new Jt({owner:this.mainGrid,editMode:g,gridFiltersManager:n,gridViewsManager:s,gridDisplaysManager:l,importFileOptions:this.importFileOptions})),this.gridViewsToolbarComponent=new Kt({owner:this.mainGrid,onViewApplied:this.onViewApplied,onViewDeleted:async()=>{await l.loadDisplays()},autoIntegration:!0,gridViewsManager:s,canCreateGlobalViews:t.CanCreateGlobalViews,visible:t.CanCreateViews}),this.gridFiltersToolbarComponent=new Yt({apsControlDisplayUserSettingsManager:new Zt({userId:this.userName,loadDataUrl:this.remoteControlDisplayUserSettingsManagerLoadOptions.loadDataUrl,updateDataUrl:this.remoteControlDisplayUserSettingsManagerLoadOptions.updateDataUrl}),owner:this.mainGrid,onFilterDeleted:async()=>{await l.loadDisplays()},autoIntegration:!0,gridFiltersManager:n,canCreateGlobalFilters:t.CanCreateGlobalFilters,visible:t.CanCreateFilters}),this.multipleEditingDataGridPlugin=new Qt({owner:this.mainGrid}),l.onDisplayChanged=async p=>{p?(await this.gridFiltersToolbarComponent.applyFilter(p.FilterId,!0),await this.gridViewsToolbarComponent.applyView(p.ViewId)):(this.gridFiltersToolbarComponent.applyFilter(void 0,!0),await this.gridViewsToolbarComponent.applyView(H.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=le(g)?JSON.parse(g):[],y=l.Data;p.push(...y),this.mainGrid.cellValue(this.activeDocumentCellInfo.rowIndex,this.activeDocumentCellInfo.field,JSON.stringify(p)),this.editingMode===2&&!this.isActiveDocumentRowNew()&&this.mainGrid.saveEditData(),i=p}else O(l.Message,!1)}catch{O("Error",!1)}finally{this.hideLoader()}return i}changePreviewImageSizeHandler(t,r){this.gridViewsToolbarComponent.options.gridStateManager.setFieldPreviewSize(t,r);let n=this.mainGrid.getVisibleRows().map(s=>s.rowIndex);this.mainGrid.repaintRows(n)}deleteDocumentHandler(t){let r=this.mainGrid.cellValue(this.activeDocumentCellInfo.rowIndex,this.activeDocumentCellInfo.field),n=(le(r)?JSON.parse(r):[]).filter(s=>s.Id!==t);return this.mainGrid.cellValue(this.activeDocumentCellInfo.rowIndex,this.activeDocumentCellInfo.field,n.length?JSON.stringify(n):""),this.editingMode===2&&!this.isActiveDocumentRowNew()&&this.mainGrid.saveEditData(),n}reorderImagesHandler(t){this.mainGrid.cellValue(this.activeDocumentCellInfo.rowIndex,this.activeDocumentCellInfo.field,t.length?JSON.stringify(t):"")}isActiveDocumentRowNew(){if(!this.mainGrid||!this.activeDocumentCellInfo)return!1;if(this.activeDocumentCellInfo.isNewRow)return!0;let t=this.mainGrid.getVisibleRows().find(i=>i.rowIndex===this.activeDocumentCellInfo.rowIndex),r=!!(t!=null&&t.isNewRow);return this.activeDocumentCellInfo.isNewRow=r,r}hasPermission(t,r){return(t&r)!==0}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,n){var s;if(t.type===1&&(r.cellTemplate=(l,g)=>{let p=String(g.value),y=t.data.find(T=>String(T.value)===p);y?$("<div>").css({"text-align":"center"}).attr("title",y.title).append($("<img>",{src:y.image})).appendTo(l):$("<div />").css({"text-align":"center"}).text(g.value).appendTo(l)},r.editCellTemplate=(l,g)=>{var p;$("<div />").dxSelectBox({dataSource:t.data,displayValue:"title",itemTemplate:y=>$("<div />").css({"text-align":"center"}).attr("title",y.title).append($("<img>",{src:y.image})).appendTo(l),fieldTemplate:(y,T)=>{let S=t.data.find(E=>{var m;return E.value.toString()===((m=g.value)==null?void 0:m.toString())}),h=$("<div />").addClass("item-name"),I=$("<div />").addClass("aps-icon-editor__custom-item").append($("<img>",{src:S?S.image:""}).attr("title",S?S.title:"")).append(h);h.dxTextBox({value:"",readOnly:!0}),T.append(I)},onValueChanged:({value:y,component:T})=>{g.setValue(parseInt(y.value)),T.blur()},value:(p=g.value)==null?void 0:p.toString(),selectedItem:t.data.find(y=>parseInt(y.value)===g.value)}).appendTo(l)},r.allowSearch=!1,r.allowFiltering=!1,r.allowHeaderFiltering=!0,r.allowGrouping=!1),t.type===2){let l=((s=t.data)==null?void 0:s.items)||[];r.cellTemplate=(g,p)=>{let y=this.getPredefinedValuesToString(p.value,t);g.append(y)},r.editCellTemplate=(g,p)=>{let y=(p.value||"").toString().split(";").map(S=>parseInt(S)),T=$("<div />").dxDropDownBox({dataSource:l,valueExpr:"key",displayExpr:"value",value:y,showClearButton:!0,acceptCustomValue:!1,dropDownOptions:{width:400},contentTemplate:S=>{var h;return $("<div />").dxDataGrid({dataSource:l,keyExpr:"key",columns:[{dataField:"key",visible:!1},{dataField:"value"}],showBorders:!1,showColumnLines:!1,showRowLines:!1,showColumnHeaders:!1,selection:{mode:(h=t.data)!=null&&h.multiselect?"multiple":"single"},selectedRowKeys:y,activeStateEnabled:!1,onSelectionChanged:I=>{let E=I.component.option("selectedRowKeys");S.component.option("value",E)}})},onValueChanged:S=>{let h=(S.value||[]).join(";");p.setValue(h)}}).dxDropDownBox("instance");g.append(T.element()),T.open()},r.headerFilter={dataSource:l.map(g=>({text:g.value,value:[r.dataField,"contains",g.key.toString()]}))},r.filterOperations=["contains"],r.calculateFilterExpression=(g,p,y)=>{if(y==="headerFilter")return[r.dataField,"contains",g];{let T=p==="<>"||p==="notcontains",S=l.filter(I=>{switch(p){case"contains":return I.value.includes(g);case"notcontains":return I.value.includes(g);case"startswith":return I.value.startsWith(g);case"endswith":return I.value.endsWith(g);case"=":return I.value===g;case"<>":return I.value===g;default:return!1}}).map(I=>[r.dataField,T?"notcontains":"contains",I.key.toString()]);return T?S.push([r.dataField,"=",null]):S.length||S.push([r.dataField,"=","__no_value__"]),S.flatMap(I=>[T?"and":"or",I]).slice(1)}}}if(t.type===8){let l=t.data.fields.map(S=>({dataField:S,allowSearch:!0,allowFiltering:!0})),g=this.getReferencedDataUrl[r.dataField]||[],p=S=>{if(S===null)return[];if(Array.isArray(S))return S;let h=this.tryParseJson(S)||S;return Array.isArray(h)?h:[h]},y=(S,h,I)=>S?h.length===1?S[h[0]]:h.reduce((m,u)=>(m.push(`${u}: ${S.hasOwnProperty(u)?S[u]:I?'<i class="referenced-value-error">Field deleted or renamed</i>':"undefined"}`),m),[]).join(", "):"",T=(S,h,I)=>{let E=$("<div />");return p(S).forEach(m=>{let u=h.lookup.calculateCellValue(m);u||I||!m?E.append(u?`<div>${u}</div>`:""):E.append(`<div><i class="referenced-value-error">Row ${t.data.table}.[${t.data.key}]=${m} not found</i></div>`)}),E};r.cellTemplate=(S,h)=>{S.append(T(h.value,h.column,h.row.isNewRow))},r.editCellTemplate=(S,h)=>{let I=$("<div />").dxDataGrid({height:500,width:"100%",dataSource:g,remoteOperations:!0,scrolling:{mode:"virtual"},selection:{mode:t.data.multiselect?"multiple":"single",showCheckBoxesMode:"always"},headerFilter:{visible:!0},filterRow:{visible:!0},selectedRowKeys:p(h.value),columns:[{dataField:t.data.key,visible:!1},...l],onSelectionChanged:m=>{E.option("value",m.selectedRowKeys)}}).dxDataGrid("instance"),E=$("<div />").dxDropDownBox({dataSource:g,value:p(h.value),valueExpr:t.data.key,displayExpr:m=>y(m,t.data.fields,!1),contentTemplate:()=>I.element(),showClearButton:!0,dropDownOptions:{width:500},onValueChanged:m=>{let u=m.value;if(!(u!=null&&u.length))h.setValue(null);else{let v=t.data.multiselect?JSON.stringify(u):u[0];h.setValue(v)}!t.data.multiselect&&(u!=null&&u.length)&&E.close()}}).dxDropDownBox("instance");S.append(E.element()),E.open()},r.lookup={dataSource:g,valueExpr:t.data.key,displayExpr:S=>y(S,t.data.fields,!0)},r.groupCellTemplate=(S,h)=>{S.append($(`
55
+ `);s.push({location:"before",template:()=>I})}},onEditorPreparing:n=>{n.parentType==="dataRow"&&n.dataField==="Name"&&(n.editorOptions.disabled=!n.row.isNewRow||!!n.row.data.IsSystemColumn)},onInitNewRow:n=>{n.data={IsKeyColumn:!1,IsDefaultViewField:!0,IsExported:!0,IsSystemColumn:!1,IsIdentity:!1,IsComputed:!1,IsNullable:!0,HasDefaultValue:!1,...this.systemFieldPredefinedData||{}},this.systemFieldPredefinedData=null},onRowRemoved:n=>{this.fields=this.fields.filter(s=>s!==n.data.Name)},onRowInserted:n=>{this.fields.push(n.data.Name)}},i={summaryColumn:"Name"};return this.isStandalonePage?t=Je(this.$container,r,i,this.pageTitle,"",!0):t=B(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:Pt({loadUrl:this.loadDataUrl,key:"Name",notifyError:!1})}}};DevExpress.ui.dxDataGrid.registerModule("columnChooserSorting",{extenders:{controllers:{columns(o){return class extends o{getChooserColumns(r){return(super.getChooserColumns(r)||[]).slice().sort((n,s)=>{let l=(n==null?void 0:n.caption)||"",g=(s==null?void 0:s.caption)||"";return l.localeCompare(g)})}}}}}});var Cr=Ct(Do());var Hi=(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},Qe=o=>{let t=null,r=null;return function(...i){return Hi(t,i)||(r=o(...i)),t=i,r}};var te=class te{constructor(t){this._currentViewId=te.defaultControlDisplayView.id;this.views=te.defaultViews;this.getViewByIdInternal=t=>this.views&&this.views.find(r=>r.id===t);this.getViewById=Qe(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===te.defaultViews&&await this.loadViews(),this.views}updateCurrentView(t){return this.updateView(this.currentView.id,t)}async createNewView(t,r,i){await this.getViews();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===te.defaultControlDisplayView.id)return!1;let i=this.getViewById(t);if(!i)return!1;let n={...i,...r},s=this.mapViewModelToDto(n);return await x(this.updateDataUrl,"PUT",s),await this.loadViews(),!0}async deleteView(t){return t===te.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(te.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=Qe(this.getViewByIdInternal)}};te.defaultControlDisplayView={id:0,name:"Default",gridState:null,isGlobal:!1},te.defaultViews=[te.defaultControlDisplayView];var H=te;var zt=class{constructor(t){var r;this.options=t,this.currentSavedGridState=t.initialState,this.imagePreviewSizeMap=((r=t.initialState)==null?void 0:r.imagePreviewSizeMap)??{},this.options.owner.option("stateStoring",{enabled:!0,type:"custom",customLoad:()=>Promise.resolve(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.imagePreviewSizeMap=this.imagePreviewSizeMap,t}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=>{this.imagePreviewSizeMap=(t==null?void 0:t.imagePreviewSizeMap)||{};let n=r?void 0:this.options.owner.filter();this.options.owner.beginUpdate(),this.options.owner.clearFilter("filterValue"),this.options.owner.state(t);let s=this.options.owner.getVisibleColumns().filter(g=>!g.type);s[0]&&s[0].dataField&&this.options.owner.option("summary",{totalItems:[{column:s[0].dataField,summaryType:"count"}]}),n&&this.options.owner.filter(n),this.options.owner.endUpdate();let l=()=>{this.save(),i(),this.options.owner.off("contentReady",l)};this.options.owner.on("contentReady",l)})}save(){this.currentSavedGridState=this.currentUnsavedGridState}reset(){this.options.owner.state(this.currentSavedGridState)}setFieldPreviewSize(t,r){this.imagePreviewSizeMap[t]=r}getFieldPreviewSize(t){return this.imagePreviewSizeMap[t]}};var Kt=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={...t,gridStateManager:t.gridStateManager?t.gridStateManager:new zt({owner:t.owner,initialState:null}),gridViewsManager:t.gridViewsManager?t.gridViewsManager:new H(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===H.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:[H.defaultControlDisplayView],value:H.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!==H.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!==H.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}),O("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),O("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!==H.defaultControlDisplayView.id&&await this.applyView(H.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===H.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 Xe=class{constructor(t){this.getFilterByIdInternal=t=>this.filters&&this.filters.find(r=>r.id===t);this.getFilterById=Qe(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){await this.getFilters();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={...i,...r},s=this.mapFilterModelToDto(n);return 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=Qe(this.getFilterByIdInternal)}};var Yt=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={...t,gridFiltersManager:t.gridFiltersManager?t.gridFiltersManager:new Xe(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:()=>{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,T=S=>{let h=S.split(", "),I=DevExpress.localization.parseDate(h[1],g)||null;if(I){let E=h[0].split(":");return I.setHours(parseInt(E[0])),I.setMinutes(parseInt(E[1])),I}else return null};s.format=y,s.editorTemplate=S=>$("<div />").dxDateBox({displayFormat:y,type:l?"datetime":"date",width:150,onValueChanged:({value:h})=>{S.setValue(DevExpress.localization.formatDate(h,y))},value:(l?T(S.value):DevExpress.localization.parseDate(S.value,y))||null}),s.filterOperations=["=","<>","<",">","<=",">=","isblank","isnotblank"],s.calculateFilterExpression=function(S){let h=[t,...r];return h[0]&&(l?h[0]=T(h[0]):h[0]=DevExpress.localization.parseDate(S,y)||null),this.defaultCalculateFilterExpression(...h)}}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),O("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})||(O("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 Ze=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:()=>n("Unknown error")})})}};var Ue=class Ue extends G{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",this.tableSelectorProperties=t.tableSelectorProperties}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:ce({loadUrl:this.getTablesListUrl,loadParams:{contextName:"",tablesOnly:!0,isWarehouseContext:!0},loadMethod:"post",notifyError:!1}),paginate:!1}),searchEnabled:!0,...this.tableSelectorProperties},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 Ze({$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=>{O(`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=B($("<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||O("Select file with data",!1);let i=r.items();if(!this.areColumnsValid(i))O("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(),O(`The table [${n.schema}].[${n.table}] has been created`,!0),this.emit(Ue.TABLE_UPDATED_EVENT),this.emit(Ue.TABLE_CREATED_EVENT,n)):O("The table has not been created",!1)}).catch(s=>{O(`Table creating error: ${s}`,!1)}).finally(()=>{this.dataGrid.endCustomLoading()})}}}addRowsToTable(){if(this.form.validate().isValid){let r=this.dataGrid.getDataSource();r||O("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(),O(`The table ${n.table} has been updated`,!0),this.emit(Ue.TABLE_UPDATED_EVENT)):O("The table has not been updated",!1)}).catch(s=>{O(`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)}};Ue.TABLE_UPDATED_EVENT="file-importer-table-updated-event",Ue.TABLE_CREATED_EVENT="file-importer-table-created-event";var Pe=Ue;var Jt=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 Pe({$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(Pe.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 qt=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 Qt=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={...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 Xt=class{constructor(t){this.defaultUserSettings={defaultFilterId:void 0,defaultViewId:H.defaultControlDisplayView.id};this.isLatestLoadedUserSettingsExpired=!0;this.options={...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)}},St=class St extends Xt{async loadUserSettings(){let t=localStorage.getItem(St.userSettingsStorageKey);return t?JSON.parse(t):this.defaultUserSettings}async updateUserSettingsInternal(t){let i={...await this.getUserSettings(),...t};return localStorage.setItem(St.userSettingsStorageKey,JSON.stringify(i)),i}};St.userSettingsStorageKey="aps:control-display:user-settings";var Dr=St,Zt=class extends Xt{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 i={...await this.getUserSettings(),...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 _r(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 Ne=class{constructor(t){this.gridGetter=t,this.privateContructor()}get grid(){return this.gridGetter()}getServiceColumns(){return[]}getRowUpdatingHandler(){}dataRowCellPrepared(t,r,i){}};function Vo(o){return typeof o=="string"?o:JSON.stringify(o)}var bt=class{constructor(){this.invalidCells={}}addInvalidCell(t,r){let i=Vo(t);this.invalidCells[i]||(this.invalidCells[i]={}),this.invalidCells[i][r]=!0}markValid(t,r){let i=Vo(t);this.invalidCells[i]&&delete this.invalidCells[i][r]}isValid(t,r){let i=Vo(t);return!this.invalidCells[i]||!this.invalidCells[i][r]}reset(){this.invalidCells={}}};var eo=class extends G{constructor(r){super();this.REQUEST_STATUS_UPDATED_EVENT="REQUEST_STATUS_UPDATED";this.pendingChanges=[];this.isRequestPending=!1;this.updateUrl=r}push(r,i=!1){this.emit(this.REQUEST_STATUS_UPDATED_EVENT,{dataChange:[r],status:0}),r.isSeparatedRequest=i,this.isRequestPending?this.pendingChanges.push(r):this.sendRequest([r])}async sendRequest(r){if(r.length===0)return;this.isRequestPending=!0,this.emit(this.REQUEST_STATUS_UPDATED_EVENT,{dataChange:r,status:1});let i=r.map(({gridKey:n,...s})=>s);try{let n=await x(this.updateUrl,"POST",JSON.stringify(i),!1,{contentType:"application/json"}),s=n.filter(l=>l.isSuccess).map(l=>({...l,dataChange:this.attachGridKey(l.dataChange,r)}));s.length&&this.emit(this.REQUEST_STATUS_UPDATED_EVENT,{status:2,dataChange:s.map(l=>l.dataChange),requestsInQueue:this.pendingChanges.length>0}),n.filter(l=>!l.isSuccess).forEach((l=>{let g=this.attachGridKey(l.dataChange,r);this.emit(this.REQUEST_STATUS_UPDATED_EVENT,{status:3,dataChange:[g],requestsInQueue:this.pendingChanges.length>0,error:l.error})}))}catch(n){this.emit(this.REQUEST_STATUS_UPDATED_EVENT,{status:3,dataChange:r,requestsInQueue:this.pendingChanges.length>0,error:n})}finally{this.isRequestPending=!1;let n=[];for(;this.pendingChanges.length;){if(this.pendingChanges[0].isSeparatedRequest){n.length||(n.push(this.pendingChanges.shift()),this.pendingChanges.shift());break}n.push(this.pendingChanges.shift())}n.length&&this.sendRequest(n)}}attachGridKey(r,i){if(!r||r.gridKey!==void 0)return r;let n=i.find(s=>s.type!==r.type?!1:this.areKeysEqual(s.key,r.key));return n&&n.gridKey!==void 0?{...r,gridKey:n.gridKey}:r}areKeysEqual(r,i){if(r===i)return!0;if(!r||!i||typeof r!="object"||typeof i!="object")return!1;try{return JSON.stringify(r)===JSON.stringify(i)}catch{return!1}}};function ko(){let o=new Date().getTime(),t=typeof performance<"u"&&performance.now&&performance.now()*1e3||0;return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(r){let i=Math.random()*16;return o>0?(i=(o+i)%16|0,o=Math.floor(o/16)):(i=(t+i)%16|0,t=Math.floor(t/16)),(r==="x"?i:i&3|8).toString(16)})}var Wi=(o,t)=>{var i;if(t===null||typeof t!="object"){let n=o.getRowIndexByKey(t),s=o.getVisibleRows();return n>=0?(i=s[n])==null?void 0:i.data:void 0}return o.getDataSource().items().find(n=>{for(let s in t)if(n[s]!==t[s])return!1;return!0})},et="isoz-uuid",to="isoz-updating-error",Et=class extends Ne{constructor(r,i,n){super(r);this.editValidationTracker=new bt;this.pendingInsertPromises=[];this.requestQueue=new eo(i),this.setupRequestQueue(n)}setupRequestQueue(r){let i=null,n=null,s=null,l=()=>{i!==null&&(window.clearTimeout(i),i=null)},g=()=>{n=null,s=null},p=(h,I)=>{n=typeof Date.now=="function"?Date.now()+h:h;let E=()=>{n=null,s=null,I()};s=E;let m=setTimeout,v=h>=4e3&&typeof m.clock<"u";i=window.setTimeout(()=>{if(i=null,v){v=!1,n!==null&&(n+=h);return}E()},h)},y=()=>{if(n===null)return;if((typeof Date.now=="function"?Date.now():0)>=n){let I=s;g(),l(),I==null||I()}},T=r.html.bind(r);r.__inlineEditingManagerPatched||(r.__inlineEditingManagerPatched=!0,r.html=(h=>h===void 0?(y(),T()):(n=null,s=null,T(h))));let S=(h,I)=>{let E=()=>{let m=this.grid.getRowIndexByKey(I);if(m===-1)return!1;let u=this.grid.getRowElement(m);return u?(h==="updating"&&u.addClass("saving"),h==="updated"?(u.removeClass("saving").addClass("saved"),u.css({opacity:"",pointerEvents:""}),typeof window<"u"&&typeof window.setTimeout=="function"?window.setTimeout(()=>u.removeClass("saved"),1e3):u.removeClass("saved"),!0):(h==="failed"&&(u.removeClass("saving saved"),u.css({opacity:"",pointerEvents:""})),!0)):!1};!E()&&typeof window<"u"&&typeof window.setTimeout=="function"&&window.setTimeout(()=>E())};this.requestQueue.on(this.requestQueue.REQUEST_STATUS_UPDATED_EVENT,async h=>{switch(h.status){case 0:h.dataChange.forEach(E=>{E.type==="update"&&S("updating",E.gridKey??E.key)});break;case 1:l(),g(),r.html("<i class='dx-icon-refresh'></i> Saving...");break;case 2:l(),h.requestsInQueue||(r.html("<i class='dx-icon-floppy'></i> Saved"),p(3e3,()=>r.html(""))),h.dataChange.forEach(E=>{if(E.type==="update"&&S("updated",E.gridKey??E.key),E.type==="insert"){let m=this.pendingInsertPromises.shift();m&&m.resolve(E.data)}});break;case 3:l(),g();let I=`<i class='dx-icon-warning'></i> ${h.error||"Failed to save"}`;r.html(I),p(5e3,()=>{r.html("")}),h.dataChange.forEach(E=>{if(E.type==="insert"){let m=this.pendingInsertPromises.shift();m&&m.reject(h.error)}if(E.type==="update"){let m=E.data[et];if(m){let u=this.grid.getVisibleRows();for(let v=0;v<u.length;v++)if(u[v].data[et]===m){let D=h.error,w=v,_=Object.keys(E.data).find(A=>A!==et);this.grid.cellValue(v,to,JSON.stringify({errMsg:D,rowIndex:w,editingField:_})),this.grid.saveEditData();let C=this.grid.getCellElement(w,_);C!=null&&C.addClass&&C.addClass("aps-grid__editing-failed");break}}S("failed",E.gridKey??E.key)}E.type==="remove"&&(S("failed",E.gridKey??E.key),typeof this.grid.refresh=="function"&&this.grid.refresh())});break}})}privateContructor(){}createDataSource(r){return this.keyExpr=r.key(),{store:new DevExpress.data.CustomStore({key:r.key(),load:i=>r.load(i),byKey:(i,n)=>r.byKey(i,n),update:(i,n)=>new Promise((s,l)=>{if(n[to]){try{let{errMsg:T,rowIndex:S,editingField:h}=JSON.parse(n[to]);l(T);let I=this.grid.getKeyByRowIndex(S);I&&this.editValidationTracker.addInvalidCell(I,h);let E=this.grid.getCellElement(S,h);E!=null&&E.addClass&&E.addClass("aps-grid__editing-failed")}catch(T){l(T)}return}let g=this.getGridKey(i),p=Wi(this.grid,g);Object.keys(n).forEach(T=>{this.editValidationTracker.markValid(g,T)});let y=$.extend(p||{},n);s(y),this.requestQueue.push({key:this.getRequestKey(i),gridKey:g,type:"update",data:n})}),insert:i=>new Promise((n,s)=>{this.pendingInsertPromises.push({resolve:n,reject:s}),this.requestQueue.push({type:"insert",data:i})}),remove:i=>new Promise(n=>{n(),this.requestQueue.push({type:"remove",key:this.getRequestKey(i),gridKey:this.getGridKey(i)})}),onLoaded:()=>{this.editValidationTracker.reset()}})}}getServiceColumns(){return[{visible:!1,dataField:et},{visible:!1,dataField:to}]}getRowUpdatingHandler(){return r=>{let i=r.component.getRowIndexByKey(r.key),n=ko();r.component.getVisibleRows()[i].data[et]=n,r.newData[et]=n}}dataRowCellPrepared(r,i,n){this.editValidationTracker.isValid(r,i)||n.addClass("aps-grid__editing-failed")}getRequestKey(r){return this.keyExpr?Array.isArray(this.keyExpr)?r&&typeof r=="object"?r:this.keyExpr.reduce((i,n)=>(i[n]=r[n],i),{}):r&&typeof r=="object"?this.keyExpr in r?{[this.keyExpr]:r[this.keyExpr]}:"key"in r?{[this.keyExpr]:r.key}:{[this.keyExpr]:r}:{[this.keyExpr]:r}:r}getGridKey(r){if(!this.keyExpr||Array.isArray(this.keyExpr))return r;if(r&&typeof r=="object"){if(this.keyExpr in r)return r[this.keyExpr];if("key"in r)return r.key}return r}};var Tt=class extends Ne{createDataSource(t){return{store:t}}privateContructor(){}};var zi={1:"string",2:"string",8:"string",3:"string",4:"string",5:"number",6:"string",7:"string",10001:"string",10002:"number",10003:"number",10004:"boolean",10005:"datetime",10006:"date"},tt=class{constructor(t){this.editingMode=2;this.fieldRefDataDict={};this.tryParseJson=t=>{try{return JSON.parse(t.toString())}catch{return}};this.onViewApplied=()=>{this.clearFilterRowAfterViewSwitching()};this.$container=t.$container,this.$savingIndicator=t.$savingIndicator,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.editingMode=t.enableInlineEditing?2:1,this.allowDataEditing=t.allowDataEditing,this.getReferencedDataUrl=t.getReferencedDataUrl,this.asyncSummaryLoad=t.asyncSummaryLoad,this.editingManager=this.editingMode===2?new Et(()=>this.mainGrid,t.batchUpdateDataUrl,this.$savingIndicator):new Tt(()=>this.mainGrid),this.imageManager=new Ae,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(async r=>{(t.enableInlineEditing?await DevExpress.ui.dialog.confirm("<i>Are you sure you want to delete this image?</i>","Confirm deletion"):!0)&&(this.imageManager.images=this.deleteDocumentHandler(r))}),this.imageManager.onReordered(()=>this.reorderImagesHandler(this.imageManager.images)),this.documentManager=new Re({width:550,height:600}),this.documentManager.onUploaded(async r=>{this.documentManager.documents=await this.uploadAndUpdateDocuments(r,2)}),this.documentManager.onDeleted(async r=>{(t.enableInlineEditing?await DevExpress.ui.dialog.confirm("<i>Are you sure you want to delete this document?</i>","Confirm deletion"):!0)&&(this.documentManager.documents=this.deleteDocumentHandler(r))}),this.documentManager.onOpen(r=>{window.open(`${this.downloadDocumentUrl}?name=${r}`,"_blank")}),this.documentManager.onDownload(r=>{window.open(r,"_blank")}),this.imageGallery=new Me,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()}async render(){this.showLoader("Loading...");let t=await x(this.userConfigUrl),i=t.FieldsConfiguration.filter(p=>{let y=p.DisplayType?JSON.parse(p.DisplayType):null;return(y==null?void 0:y.type)===8}).map(p=>p.Name).map(p=>x(`${this.getReferencedDataUrl}?field=${p}`).then(y=>this.fieldRefDataDict[p]=y));await Promise.all(i),this.hideLoader();let n=new Xe(this.gridFiltersManagerOptions),s=new H(this.gridViewsManagerOptions),l=new qt(this.gridDisplaysManagerOptions);this.mainGrid=this.createMainGrid(t.FieldsConfiguration,t.CanBeCreated,t.CanBeDeleted);let g=t.CanCreateDisplays&&t.CanCreateViews&&t.CanCreateFilters;(g||t.CanApplayDisplays)&&(this.gridDisplaysToolbarComponent=new Jt({owner:this.mainGrid,editMode:g,gridFiltersManager:n,gridViewsManager:s,gridDisplaysManager:l,importFileOptions:this.importFileOptions})),this.gridViewsToolbarComponent=new Kt({owner:this.mainGrid,onViewApplied:this.onViewApplied,onViewDeleted:async()=>{await l.loadDisplays()},autoIntegration:!0,gridViewsManager:s,canCreateGlobalViews:t.CanCreateGlobalViews,visible:t.CanCreateViews}),this.gridFiltersToolbarComponent=new Yt({apsControlDisplayUserSettingsManager:new Zt({userId:this.userName,loadDataUrl:this.remoteControlDisplayUserSettingsManagerLoadOptions.loadDataUrl,updateDataUrl:this.remoteControlDisplayUserSettingsManagerLoadOptions.updateDataUrl}),owner:this.mainGrid,onFilterDeleted:async()=>{await l.loadDisplays()},autoIntegration:!0,gridFiltersManager:n,canCreateGlobalFilters:t.CanCreateGlobalFilters,visible:t.CanCreateFilters}),this.multipleEditingDataGridPlugin=new Qt({owner:this.mainGrid}),l.onDisplayChanged=async p=>{p?(await this.gridFiltersToolbarComponent.applyFilter(p.FilterId,!0),await this.gridViewsToolbarComponent.applyView(p.ViewId)):(this.gridFiltersToolbarComponent.applyFilter(void 0,!0),await this.gridViewsToolbarComponent.applyView(H.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=le(g)?JSON.parse(g):[],y=l.Data;p.push(...y),this.mainGrid.cellValue(this.activeDocumentCellInfo.rowIndex,this.activeDocumentCellInfo.field,JSON.stringify(p)),this.editingMode===2&&!this.isActiveDocumentRowNew()&&this.mainGrid.saveEditData(),i=p}else O(l.Message,!1)}catch{O("Error",!1)}finally{this.hideLoader()}return i}changePreviewImageSizeHandler(t,r){this.gridViewsToolbarComponent.options.gridStateManager.setFieldPreviewSize(t,r);let n=this.mainGrid.getVisibleRows().map(s=>s.rowIndex);this.mainGrid.repaintRows(n)}deleteDocumentHandler(t){let r=this.mainGrid.cellValue(this.activeDocumentCellInfo.rowIndex,this.activeDocumentCellInfo.field),n=(le(r)?JSON.parse(r):[]).filter(s=>s.Id!==t);return this.mainGrid.cellValue(this.activeDocumentCellInfo.rowIndex,this.activeDocumentCellInfo.field,JSON.stringify(n)),this.editingMode===2&&!this.isActiveDocumentRowNew()&&this.mainGrid.saveEditData(),n}reorderImagesHandler(t){this.mainGrid.cellValue(this.activeDocumentCellInfo.rowIndex,this.activeDocumentCellInfo.field,JSON.stringify(t))}isActiveDocumentRowNew(){if(!this.mainGrid||!this.activeDocumentCellInfo)return!1;if(this.activeDocumentCellInfo.isNewRow)return!0;let t=this.mainGrid.getVisibleRows().find(i=>i.rowIndex===this.activeDocumentCellInfo.rowIndex),r=!!(t!=null&&t.isNewRow);return this.activeDocumentCellInfo.isNewRow=r,r}hasPermission(t,r){return(t&r)!==0}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,n){var s;if(t.type===1&&(r.cellTemplate=(l,g)=>{let p=String(g.value),y=t.data.find(T=>String(T.value)===p);y?$("<div>").css({"text-align":"center"}).attr("title",y.title).append($("<img>",{src:y.image})).appendTo(l):$("<div />").css({"text-align":"center"}).text(g.value).appendTo(l)},r.editCellTemplate=(l,g)=>{var p;$("<div />").dxSelectBox({dataSource:t.data,displayValue:"title",itemTemplate:y=>$("<div />").css({"text-align":"center"}).attr("title",y.title).append($("<img>",{src:y.image})).appendTo(l),fieldTemplate:(y,T)=>{let S=t.data.find(E=>{var m;return E.value.toString()===((m=g.value)==null?void 0:m.toString())}),h=$("<div />").addClass("item-name"),I=$("<div />").addClass("aps-icon-editor__custom-item").append($("<img>",{src:S?S.image:""}).attr("title",S?S.title:"")).append(h);h.dxTextBox({value:"",readOnly:!0}),T.append(I)},onValueChanged:({value:y,component:T})=>{g.setValue(parseInt(y.value)),T.blur()},value:(p=g.value)==null?void 0:p.toString(),selectedItem:t.data.find(y=>parseInt(y.value)===g.value)}).appendTo(l)},r.allowSearch=!1,r.allowFiltering=!1,r.allowHeaderFiltering=!0,r.allowGrouping=!1),t.type===2){let l=((s=t.data)==null?void 0:s.items)||[];r.cellTemplate=(g,p)=>{let y=this.getPredefinedValuesToString(p.value,t);g.append(y)},r.editCellTemplate=(g,p)=>{let y=(p.value||"").toString().split(";").map(S=>parseInt(S)),T=$("<div />").dxDropDownBox({dataSource:l,valueExpr:"key",displayExpr:"value",value:y,showClearButton:!0,acceptCustomValue:!1,dropDownOptions:{width:400},contentTemplate:S=>{var h;return $("<div />").dxDataGrid({dataSource:l,keyExpr:"key",columns:[{dataField:"key",visible:!1},{dataField:"value"}],showBorders:!1,showColumnLines:!1,showRowLines:!1,showColumnHeaders:!1,selection:{mode:(h=t.data)!=null&&h.multiselect?"multiple":"single"},selectedRowKeys:y,activeStateEnabled:!1,onSelectionChanged:I=>{let E=I.component.option("selectedRowKeys");S.component.option("value",E)}})},onValueChanged:S=>{let h=(S.value||[]).join(";");p.setValue(h)}}).dxDropDownBox("instance");g.append(T.element()),T.open()},r.headerFilter={dataSource:l.map(g=>({text:g.value,value:[r.dataField,"contains",g.key.toString()]}))},r.filterOperations=["contains"],r.calculateFilterExpression=(g,p,y)=>{if(y==="headerFilter")return[r.dataField,"contains",g];{let T=p==="<>"||p==="notcontains",S=l.filter(I=>{switch(p){case"contains":return I.value.includes(g);case"notcontains":return I.value.includes(g);case"startswith":return I.value.startsWith(g);case"endswith":return I.value.endsWith(g);case"=":return I.value===g;case"<>":return I.value===g;default:return!1}}).map(I=>[r.dataField,T?"notcontains":"contains",I.key.toString()]);return T?S.push([r.dataField,"=",null]):S.length||S.push([r.dataField,"=","__no_value__"]),S.flatMap(I=>[T?"and":"or",I]).slice(1)}}}if(t.type===8){let l=t.data.fields.map(S=>({dataField:S,allowSearch:!0,allowFiltering:!0})),g=this.getReferencedDataUrl[r.dataField]||[],p=S=>{if(S===null)return[];if(Array.isArray(S))return S;let h=this.tryParseJson(S)||S;return Array.isArray(h)?h:[h]},y=(S,h,I)=>S?h.length===1?S[h[0]]:h.reduce((m,u)=>(m.push(`${u}: ${S.hasOwnProperty(u)?S[u]:I?'<i class="referenced-value-error">Field deleted or renamed</i>':"undefined"}`),m),[]).join(", "):"",T=(S,h,I)=>{let E=$("<div />");return p(S).forEach(m=>{let u=h.lookup.calculateCellValue(m);u||I||!m?E.append(u?`<div>${u}</div>`:""):E.append(`<div><i class="referenced-value-error">Row ${t.data.table}.[${t.data.key}]=${m} not found</i></div>`)}),E};r.cellTemplate=(S,h)=>{S.append(T(h.value,h.column,h.row.isNewRow))},r.editCellTemplate=(S,h)=>{let I=$("<div />").dxDataGrid({height:500,width:"100%",dataSource:g,remoteOperations:!0,scrolling:{mode:"virtual"},selection:{mode:t.data.multiselect?"multiple":"single",showCheckBoxesMode:"always"},headerFilter:{visible:!0},filterRow:{visible:!0},selectedRowKeys:p(h.value),columns:[{dataField:t.data.key,visible:!1},...l],onSelectionChanged:m=>{E.option("value",m.selectedRowKeys)}}).dxDataGrid("instance"),E=$("<div />").dxDropDownBox({dataSource:g,value:p(h.value),valueExpr:t.data.key,displayExpr:m=>y(m,t.data.fields,!1),contentTemplate:()=>I.element(),showClearButton:!0,dropDownOptions:{width:500},onValueChanged:m=>{let u=m.value;if(!(u!=null&&u.length))h.setValue(null);else{let v=t.data.multiselect?JSON.stringify(u):u[0];h.setValue(v)}!t.data.multiselect&&(u!=null&&u.length)&&E.close()}}).dxDropDownBox("instance");S.append(E.element()),E.open()},r.lookup={dataSource:g,valueExpr:t.data.key,displayExpr:S=>y(S,t.data.fields,!0)},r.groupCellTemplate=(S,h)=>{S.append($(`
56
56
  <div class="referenced-value-group-header">
57
57
  <div class="referenced-value-group-header__caption">${h.column.caption}: </div>
58
58
  </div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iszolea-ui",
3
- "version": "1.2.86-pbi-26875.1",
3
+ "version": "1.2.86-pbi-26875.2",
4
4
  "description": "Common scripts and styles for Iszolea projects",
5
5
  "main": "dist/js/index.js",
6
6
  "types": "dist/types/index.d.ts",
@@ -14,6 +14,7 @@
14
14
  "@testing-library/user-event": "^14.6.1",
15
15
  "@types/google-protobuf": "^3.15.5",
16
16
  "@types/jquery": "3.3.32",
17
+ "@types/node": "24.9.1",
17
18
  "@typescript-eslint/eslint-plugin": "8.45.0",
18
19
  "@typescript-eslint/parser": "8.45.0",
19
20
  "@vitest/coverage-v8": "^3.2.4",
@@ -46,6 +47,7 @@
46
47
  "protoc-gen-grpc-web": "^1.4.2",
47
48
  "publish-please": "5.5.1",
48
49
  "sass": "1.53.0",
50
+ "testcafe": "^3.7.2",
49
51
  "typescript": "^5.4.0",
50
52
  "typescript-eslint": "^8.45.0",
51
53
  "typescript-tslint-plugin": "0.5.5",
@@ -86,6 +88,7 @@
86
88
  "test:unit": "vitest run --coverage",
87
89
  "test:unit:watch": "vitest",
88
90
  "test:unit:ci": "vitest run --coverage --reporter=junit --outputFile=artifacts/unit-junit.xml",
89
- "test:kpi": "node scripts/check-unit-kpi.cjs"
91
+ "test:kpi": "node scripts/check-unit-kpi.cjs",
92
+ "test:e2e": "testcafe --config-file -e testcaferc.json --speed 0.8"
90
93
  }
91
94
  }