From a4d8a7e7fc31c95b0d7a56bbb3d3376d34d64eb9 Mon Sep 17 00:00:00 2001 From: "blazej.kuhajda" Date: Mon, 20 Jan 2025 09:39:08 +0100 Subject: [PATCH 1/3] export params as uint --- .../AxoDataExchange/DataExchangeViewModel.cs | 4 ++-- .../DataExchange/AxoDataExchange.cs | 2 +- .../DataExchange/IAxoDataExchange.cs | 2 +- .../AxoDataFragmentExchange.cs | 2 +- .../ExportImport/BaseDataExporter.cs | 24 +++++++++++++++---- .../ExportImport/CSVDataExporter.cs | 2 +- .../AXOpen.Data/ExportImport/IDataExporter.cs | 2 +- .../ExportImport/TXTDataExporter.cs | 2 +- .../ExcelDataExporter.cs | 24 +++++++++++++++---- 9 files changed, 48 insertions(+), 16 deletions(-) diff --git a/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeViewModel.cs b/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeViewModel.cs index cf03be4c9..42cc7dc99 100644 --- a/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeViewModel.cs +++ b/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeViewModel.cs @@ -370,8 +370,8 @@ public class ExportSettings { public Dictionary CustomExportData { get; set; } = new(); public eExportMode ExportMode { get; set; } = eExportMode.First; - public int FirstNumber { get; set; } = 50; - public int SecondNumber { get; set; } = 100; + public uint FirstNumber { get; set; } = 50; + public uint SecondNumber { get; set; } = 100; public string ExportFileType { get; set; } = "CSV"; public char Separator { get; set; } = ';'; } diff --git a/src/data/src/AXOpen.Data/DataExchange/AxoDataExchange.cs b/src/data/src/AXOpen.Data/DataExchange/AxoDataExchange.cs index 49bc25bdb..fa561e11a 100644 --- a/src/data/src/AXOpen.Data/DataExchange/AxoDataExchange.cs +++ b/src/data/src/AXOpen.Data/DataExchange/AxoDataExchange.cs @@ -633,7 +633,7 @@ private List LoadAssemblies() } /// - public void ExportData(string path, Dictionary? customExportData = null, eExportMode exportMode = eExportMode.First, int firstNumber = 50, int secondNumber = 100, string exportFileType = "CSV", char separator = ';') + public void ExportData(string path, Dictionary? customExportData = null, eExportMode exportMode = eExportMode.First, uint firstNumber = 50, uint secondNumber = 100, string exportFileType = "CSV", char separator = ';') { if (customExportData == null) customExportData = new Dictionary(); diff --git a/src/data/src/AXOpen.Data/DataExchange/IAxoDataExchange.cs b/src/data/src/AXOpen.Data/DataExchange/IAxoDataExchange.cs index 2126fff01..bc6cf5d0b 100644 --- a/src/data/src/AXOpen.Data/DataExchange/IAxoDataExchange.cs +++ b/src/data/src/AXOpen.Data/DataExchange/IAxoDataExchange.cs @@ -200,7 +200,7 @@ IEnumerable GetRecords(string identifier, int limit, int s /// /// Path to exported file. /// Separator for individual records. - void ExportData(string path, Dictionary customExportData = null, eExportMode exportMode = eExportMode.First, int firstNumber = 50, int secondNumber = 100, string exportFileType = "CSV", char separator = ';'); + void ExportData(string path, Dictionary customExportData = null, eExportMode exportMode = eExportMode.First, uint firstNumber = 50, uint secondNumber = 100, string exportFileType = "CSV", char separator = ';'); /// /// Import data from file to the associated with this . diff --git a/src/data/src/AXOpen.Data/DataFragmentExchange/AxoDataFragmentExchange.cs b/src/data/src/AXOpen.Data/DataFragmentExchange/AxoDataFragmentExchange.cs index cfd3de678..64f481cab 100644 --- a/src/data/src/AXOpen.Data/DataFragmentExchange/AxoDataFragmentExchange.cs +++ b/src/data/src/AXOpen.Data/DataFragmentExchange/AxoDataFragmentExchange.cs @@ -426,7 +426,7 @@ public Dictionary Exporters } } - public void ExportData(string path, Dictionary customExportData = null, eExportMode exportMode = eExportMode.First, int firstNumber = 50, int secondNumber = 100, string exportFileType = "CSV", char separator = ';') + public void ExportData(string path, Dictionary customExportData = null, eExportMode exportMode = eExportMode.First, uint firstNumber = 50, uint secondNumber = 100, string exportFileType = "CSV", char separator = ';') { if (Path.GetExtension(path).Equals(".zip", StringComparison.OrdinalIgnoreCase)) { diff --git a/src/data/src/AXOpen.Data/ExportImport/BaseDataExporter.cs b/src/data/src/AXOpen.Data/ExportImport/BaseDataExporter.cs index e56f721b4..298fb6a46 100644 --- a/src/data/src/AXOpen.Data/ExportImport/BaseDataExporter.cs +++ b/src/data/src/AXOpen.Data/ExportImport/BaseDataExporter.cs @@ -19,7 +19,7 @@ public BaseDataExporter() { } - public List BaseExport(IRepository dataRepository, Expression> expression, Dictionary? customExportData = null, eExportMode exportMode = eExportMode.First, int firstNumber = 50, int secondNumber = 100, char separator = ';') + public List BaseExport(IRepository dataRepository, Expression> expression, Dictionary? customExportData = null, eExportMode exportMode = eExportMode.First, uint firstNumber = 50, uint secondNumber = 100, char separator = ';') { if (customExportData == null) customExportData = new Dictionary(); @@ -27,16 +27,32 @@ public BaseDataExporter() var prototype = Activator.CreateInstance(typeof(TOnline), new object[] { ConnectorAdapterBuilder.Build().CreateDummy().GetConnector(new object[] { }), "_data", "_data" }) as ITwinObject; IQueryable exportables = null; + int toSkip = 0; + int toTake = 0; + switch (exportMode) { case eExportMode.First: - exportables = dataRepository.Queryable.Where(expression).Skip((int)dataRepository.Count - firstNumber).Take(firstNumber).OrderByDescending(e => e.RecordId); + + toSkip = (int)dataRepository.Count - (int)firstNumber; + if (toSkip < 0) toSkip = 0; + + exportables = dataRepository.Queryable.Where(expression).Skip(toSkip).Take((int)firstNumber).OrderByDescending(e => e.RecordId); + break; case eExportMode.Last: - exportables = dataRepository.Queryable.Where(expression).Take(firstNumber).OrderByDescending(e => e.RecordId); + exportables = dataRepository.Queryable.Where(expression).Take((int)firstNumber).OrderByDescending(e => e.RecordId); break; + case eExportMode.Exact: - exportables = dataRepository.Queryable.Where(expression).Skip(firstNumber - 1).Take(secondNumber - firstNumber + 1).OrderByDescending(e => e.RecordId); + + toSkip = (int)firstNumber - 1; + if (toSkip < 0) toSkip = 0; + + toTake = (int)secondNumber - (int)firstNumber + 1; + if (toTake < 1) toTake = 1; + + exportables = dataRepository.Queryable.Where(expression).Skip(toSkip).Take(toTake).OrderByDescending(e => e.RecordId); break; } diff --git a/src/data/src/AXOpen.Data/ExportImport/CSVDataExporter.cs b/src/data/src/AXOpen.Data/ExportImport/CSVDataExporter.cs index 7ecdd0cef..d5880430d 100644 --- a/src/data/src/AXOpen.Data/ExportImport/CSVDataExporter.cs +++ b/src/data/src/AXOpen.Data/ExportImport/CSVDataExporter.cs @@ -21,7 +21,7 @@ public CSVDataExporter() { } - public void Export(IRepository dataRepository, string path, string fragmentName, Expression> expression, Dictionary customExportData = null, eExportMode exportMode = eExportMode.First, int firstNumber = 50, int secondNumber = 100, char separator = ';') + public void Export(IRepository dataRepository, string path, string fragmentName, Expression> expression, Dictionary customExportData = null, eExportMode exportMode = eExportMode.First, uint firstNumber = 50, uint secondNumber = 100, char separator = ';') { var export = BaseExport(dataRepository, expression, customExportData, exportMode, firstNumber, secondNumber, separator); diff --git a/src/data/src/AXOpen.Data/ExportImport/IDataExporter.cs b/src/data/src/AXOpen.Data/ExportImport/IDataExporter.cs index 9e4b25b8d..389b3fb31 100644 --- a/src/data/src/AXOpen.Data/ExportImport/IDataExporter.cs +++ b/src/data/src/AXOpen.Data/ExportImport/IDataExporter.cs @@ -21,7 +21,7 @@ public interface IDataExporter where TOnline : IAxoDataEntity /// Name of the fragment. /// Expression of function for export rules. /// Separator for individual records. - void Export(IRepository dataRepository, string path, string fragmentName, Expression> expression, Dictionary customExportData = null, eExportMode exportMode = eExportMode.First, int firstNumber = 50, int secondNumber = 100, char separator = ';'); + void Export(IRepository dataRepository, string path, string fragmentName, Expression> expression, Dictionary customExportData = null, eExportMode exportMode = eExportMode.First, uint firstNumber = 50, uint secondNumber = 100, char separator = ';'); /// /// Import data from file to the repository. diff --git a/src/data/src/AXOpen.Data/ExportImport/TXTDataExporter.cs b/src/data/src/AXOpen.Data/ExportImport/TXTDataExporter.cs index ceec2d09d..fdea453f8 100644 --- a/src/data/src/AXOpen.Data/ExportImport/TXTDataExporter.cs +++ b/src/data/src/AXOpen.Data/ExportImport/TXTDataExporter.cs @@ -21,7 +21,7 @@ public TXTDataExporter() { } - public void Export(IRepository dataRepository, string path, string fragmentName, Expression> expression, Dictionary customExportData = null, eExportMode exportMode = eExportMode.First, int firstNumber = 50, int secondNumber = 100, char separator = ';') + public void Export(IRepository dataRepository, string path, string fragmentName, Expression> expression, Dictionary customExportData = null, eExportMode exportMode = eExportMode.First, uint firstNumber = 50, uint secondNumber = 100, char separator = ';') { var export = BaseExport(dataRepository, expression, customExportData, exportMode, firstNumber, secondNumber, separator); diff --git a/src/data/src/exporters/AXOpen.Data.Exporters.Excel/ExcelDataExporter.cs b/src/data/src/exporters/AXOpen.Data.Exporters.Excel/ExcelDataExporter.cs index f86689cd4..b01cf54fb 100644 --- a/src/data/src/exporters/AXOpen.Data.Exporters.Excel/ExcelDataExporter.cs +++ b/src/data/src/exporters/AXOpen.Data.Exporters.Excel/ExcelDataExporter.cs @@ -89,7 +89,7 @@ public ExcelDataExporter() { } - public void Export(IRepository dataRepository, string path, string fragmentName, Expression> expression, Dictionary? customExportData = null, eExportMode exportMode = eExportMode.First, int firstNumber = 50, int secondNumber = 100, char separator = ';') + public void Export(IRepository dataRepository, string path, string fragmentName, Expression> expression, Dictionary? customExportData = null, eExportMode exportMode = eExportMode.First, uint firstNumber = 50, uint secondNumber = 100, char separator = ';') { var prototype = Activator.CreateInstance(typeof(TOnline), new object[] { ConnectorAdapterBuilder.Build().CreateDummy().GetConnector(new object[] { }), "_data", "_data" }) as ITwinObject; @@ -97,16 +97,32 @@ public ExcelDataExporter() // Get exportables in range IQueryable exportables = null; + int toSkip = 0; + int toTake = 0; + switch (exportMode) { case eExportMode.First: - exportables = dataRepository.Queryable.Where(expression).Skip((int)dataRepository.Count - firstNumber).Take(firstNumber).OrderByDescending(e => e.RecordId); + + toSkip = (int)dataRepository.Count - (int)firstNumber; + if (toSkip < 0) toSkip = 0; + + exportables = dataRepository.Queryable.Where(expression).Skip(toSkip).Take((int)firstNumber).OrderByDescending(e => e.RecordId); + break; case eExportMode.Last: - exportables = dataRepository.Queryable.Where(expression).Take(firstNumber).OrderByDescending(e => e.RecordId); + exportables = dataRepository.Queryable.Where(expression).Take((int)firstNumber).OrderByDescending(e => e.RecordId); break; + case eExportMode.Exact: - exportables = dataRepository.Queryable.Where(expression).Skip(firstNumber - 1).Take(secondNumber - firstNumber + 1).OrderByDescending(e => e.RecordId); + + toSkip = (int)firstNumber - 1; + if (toSkip < 0) toSkip = 0; + + toTake = (int)secondNumber - (int)firstNumber + 1; + if (toTake < 1) toTake = 1; + + exportables = dataRepository.Queryable.Where(expression).Skip(toSkip).Take(toTake).OrderByDescending(e => e.RecordId); break; } From 0c7f57cd8677f2d5f68eed9762280e3ac8111acd Mon Sep 17 00:00:00 2001 From: "blazej.kuhajda" Date: Tue, 21 Jan 2025 08:01:20 +0100 Subject: [PATCH 2/3] added enum operation status, export path as a property --- .../librarytemplate.blazor.csproj | 1 + .../AxoDataExchange/DataExchangeView.razor | 60 +++++++++++++--- .../AxoDataExchange/DataExchangeView.razor.cs | 68 ++++++++++++++++++- .../AxoDataExchange/DataExchangeViewModel.cs | 8 ++- .../ExportImport/eOperationStatus.cs | 16 +++++ 5 files changed, 137 insertions(+), 16 deletions(-) create mode 100644 src/data/src/AXOpen.Data/ExportImport/eOperationStatus.cs diff --git a/src/data/app/ix-blazor/librarytemplate.blazor/librarytemplate.blazor.csproj b/src/data/app/ix-blazor/librarytemplate.blazor/librarytemplate.blazor.csproj index db293891e..feaccf60d 100644 --- a/src/data/app/ix-blazor/librarytemplate.blazor/librarytemplate.blazor.csproj +++ b/src/data/app/ix-blazor/librarytemplate.blazor/librarytemplate.blazor.csproj @@ -14,6 +14,7 @@ + diff --git a/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeView.razor b/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeView.razor index 700e88810..fea126928 100644 --- a/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeView.razor +++ b/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeView.razor @@ -39,7 +39,7 @@ else { - + @@ -603,23 +603,51 @@ else @@ -657,7 +685,14 @@ else Loading... } - + @@ -669,7 +704,12 @@ else diff --git a/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeView.razor.cs b/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeView.razor.cs index b0b482860..adbde7824 100644 --- a/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeView.razor.cs +++ b/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeView.razor.cs @@ -59,6 +59,54 @@ public partial class DataExchangeView : ComponentBase, IDisposable private ProtectedLocalStorage ProtectedLocalStore { get; set; } private Guid ViewGuid { get; } = Guid.NewGuid(); + + private string _inputFileId = Guid.NewGuid().ToString(); + + + private string _ClientFolder = string.Empty; + + public string ClientFolder + { + get + { + if (string.IsNullOrEmpty(_ClientFolder)) _ClientFolder = "wwwroot/Temp/" + ViewGuid; + return _ClientFolder; + } + } + + private string _ExportPath = string.Empty; + + public string ExportPath + { + get + { + if (string.IsNullOrEmpty(_ExportPath)) _ExportPath = ClientFolder + "/exportData.zip"; + return _ExportPath; + } + } + + private string _ImportPath = string.Empty; + + public string ImportPath + { + get + { + if (string.IsNullOrEmpty(_ImportPath)) _ImportPath = ClientFolder + "/importData.zip"; + return _ImportPath; + } + } + + private string _ExportDownloadUrl = string.Empty; + + public string ExportDownloadUrl + { + get + { + if (string.IsNullOrEmpty(_ExportDownloadUrl)) _ExportDownloadUrl = "/Temp/" + ViewGuid + "/exportData.zip"; + return _ExportDownloadUrl; + } + } + private string Create { get; set; } = ""; private bool isFileImported { get; set; } = false; @@ -138,7 +186,6 @@ protected override async Task OnInitializedAsync() Vm.StateHasChangedDelegate = StateHasChanged; } - private string _inputFileId = Guid.NewGuid().ToString(); private async Task LoadFile(InputFileChangeEventArgs e) { @@ -147,9 +194,9 @@ private async Task LoadFile(InputFileChangeEventArgs e) try { - Directory.CreateDirectory("wwwroot/Temp/" + ViewGuid); + Directory.CreateDirectory(ClientFolder); - await using FileStream fs = new("wwwroot/Temp/" + ViewGuid + "/importData.zip", FileMode.Create); + await using FileStream fs = new(ImportPath, FileMode.Create); await e.File.OpenReadStream().CopyToAsync(fs); isFileImported = true; @@ -168,6 +215,21 @@ private void ClearFiles(string path) Directory.Delete(path, true); } + private void ClearClientFiles() + { + ClearFiles(ClientFolder); + Vm.exportStatus = eOperationStatus.Ready; // reset export status + } + + public async Task ExportDataAndSaveExportSettings() + { + Vm.exportStatus = eOperationStatus.Ready; + + await SaveCustomExportDataAsync(); + + await Vm.ExportDataAsync(ExportPath); + } + public async Task SaveCustomExportDataAsync() { await ProtectedLocalStore.SetAsync(Vm.DataExchange.ToString(), Vm.ExportSet); diff --git a/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeViewModel.cs b/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeViewModel.cs index 42cc7dc99..44c82030f 100644 --- a/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeViewModel.cs +++ b/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeViewModel.cs @@ -55,7 +55,8 @@ public AuthenticationStateProvider AuthenticationProvider } } - public bool IsFileExported { get; set; } = false; + public eOperationStatus exportStatus { get; set; } = eOperationStatus.Ready; + public List Changes { get; set; } = new List(); private IAlertService _alertDialogService; @@ -310,7 +311,7 @@ public async Task LoadFromPlc() public Task ExportDataAsync(string path) { - IsFileExported = false; + exportStatus = eOperationStatus.Busy; return Task.Run(() => { @@ -318,7 +319,7 @@ public Task ExportDataAsync(string path) { DataExchange.ExportData(path, ExportSet.CustomExportData, ExportSet.ExportMode, ExportSet.FirstNumber, ExportSet.SecondNumber, ExportSet.ExportFileType, ExportSet.Separator); - IsFileExported = true; + exportStatus = eOperationStatus.Done; AlertDialogService?.AddAlertDialog(eAlertType.Success, "Exported!", "Data was successfully exported!", 10); @@ -328,6 +329,7 @@ public Task ExportDataAsync(string path) catch (Exception e) { AlertDialogService?.AddAlertDialog(eAlertType.Danger, "Error!", e.Message, 10); + exportStatus = eOperationStatus.Failed; } }); } diff --git a/src/data/src/AXOpen.Data/ExportImport/eOperationStatus.cs b/src/data/src/AXOpen.Data/ExportImport/eOperationStatus.cs new file mode 100644 index 000000000..44fd89707 --- /dev/null +++ b/src/data/src/AXOpen.Data/ExportImport/eOperationStatus.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AXOpen.Data +{ + public enum eOperationStatus + { + Ready = 0, + Busy = 1, + Failed = 2, + Done = 3, + } +} \ No newline at end of file From 4fc31516db5739da0e88e3ac4a0585652584b79c Mon Sep 17 00:00:00 2001 From: "blazej.kuhajda" Date: Wed, 22 Jan 2025 14:21:23 +0100 Subject: [PATCH 3/3] import status in the feature it will be handy implement import export with cancelation token --- .../AxoDataExchange/DataExchangeView.razor | 51 ++++++++++++------- .../AxoDataExchange/DataExchangeView.razor.cs | 29 +++++------ .../AxoDataExchange/DataExchangeViewModel.cs | 17 +++---- 3 files changed, 54 insertions(+), 43 deletions(-) diff --git a/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeView.razor b/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeView.razor index fea126928..8c33e7a40 100644 --- a/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeView.razor +++ b/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeView.razor @@ -39,13 +39,13 @@ else { - + - + } @@ -658,12 +658,32 @@ else - @if (!isFileImported && isFileImporting) - { -
- Loading... -
- } - - + @@ -706,9 +721,7 @@ else

@Localizer["Export data"]

} - + diff --git a/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeView.razor.cs b/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeView.razor.cs index 8dcf01b11..fdbe52d94 100644 --- a/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeView.razor.cs +++ b/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeView.razor.cs @@ -62,6 +62,8 @@ public partial class DataExchangeView : ComponentBase, IDisposable private string _inputFileId = Guid.NewGuid().ToString(); + private eOperationStatus _fileLoadingStatus = eOperationStatus.Ready; + private string _ClientFolder = string.Empty; @@ -109,8 +111,6 @@ public string ExportDownloadUrl private string Create { get; set; } = ""; - private bool isFileImported { get; set; } = false; - private bool isFileImporting { get; set; } = false; private int MaxPage => (int)(Vm.FilteredCount % Vm.Limit == 0 ? Vm.FilteredCount / Vm.Limit - 1 : Vm.FilteredCount / Vm.Limit); @@ -189,24 +189,26 @@ protected override async Task OnInitializedAsync() private async Task LoadFile(InputFileChangeEventArgs e) { - isFileImported = false; - isFileImporting = true; + _fileLoadingStatus = eOperationStatus.Busy; try { - Directory.CreateDirectory(ClientFolder); + if (!Directory.Exists(ClientFolder)) + Directory.CreateDirectory(ClientFolder); + Console.WriteLine( $"willl be imported to {ImportPath}"); await using FileStream fs = new(ImportPath, FileMode.Create); + await e.File.OpenReadStream().CopyToAsync(fs); - isFileImported = true; + _fileLoadingStatus = eOperationStatus.Done; } catch (Exception ex) { _alertDialogService.AddAlertDialog(eAlertType.Danger, "Error!", ex.Message, 10); + _fileLoadingStatus = eOperationStatus.Failed; } - isFileImporting = false; } private void ClearFiles(string path) @@ -219,15 +221,8 @@ private void ClearClientFiles() { ClearFiles(ClientFolder); Vm.exportStatus = eOperationStatus.Ready; // reset export status - } - - public async Task ExportDataAndSaveExportSettings() - { - Vm.exportStatus = eOperationStatus.Ready; - - await SaveCustomExportDataAsync(); - - await Vm.ExportDataAsync(ExportPath); + Vm.importStatus = eOperationStatus.Ready; + this._fileLoadingStatus = eOperationStatus.Ready; } public async Task SaveCustomExportDataAsync() @@ -242,9 +237,11 @@ public async Task LoadCustomExportDataAsync() { Vm.ExportSet = result.Value; } + StateHasChanged(); } + protected void ReloadRecordAfterEditWithoutModal() { if (this.ModalDataView) return; // make a sense when is not modal window diff --git a/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeViewModel.cs b/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeViewModel.cs index 44c82030f..3839af70b 100644 --- a/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeViewModel.cs +++ b/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeViewModel.cs @@ -30,6 +30,7 @@ public IAxoDataExchange DataExchange get; private set; } + public override object Model { get => this.DataExchange; @@ -41,11 +42,12 @@ public DataExchangeViewModel() } private AuthenticationStateProvider _authenticationProvider; + public AuthenticationStateProvider AuthenticationProvider { get { - if(_authenticationProvider == null) + if (_authenticationProvider == null) throw new Exception("AuthenticationProvider must be implemented in " + this.ToString()); return _authenticationProvider; } @@ -56,10 +58,12 @@ public AuthenticationStateProvider AuthenticationProvider } public eOperationStatus exportStatus { get; set; } = eOperationStatus.Ready; + public eOperationStatus importStatus { get; set; } = eOperationStatus.Ready; public List Changes { get; set; } = new List(); private IAlertService _alertDialogService; + public IAlertService AlertDialogService { get @@ -271,8 +275,6 @@ public async Task Copy() } } - - public async Task Edit() { await DataExchange.UpdateFromShadowsAsync(); @@ -294,7 +296,6 @@ public async Task LoadFromPlc() await DataExchange.CreateDataFromControllerAsync(CreateItemId); AlertDialogService?.AddAlertDialog(eAlertType.Success, "Loaded from PLC!", "Item was successfully loaded from PLC!", 10); AxoApplication.Current.Logger.Information($"Loaded from Plc {CreateItemId} into {DataExchange} by user action.", AuthenticationProvider.GetAuthenticationStateAsync().Result.User.Identity); - } catch (Exception e) { @@ -305,8 +306,6 @@ public async Task LoadFromPlc() await FillObservableRecordsAsync(); CreateItemId = null; } - - } public Task ExportDataAsync(string path) @@ -324,7 +323,6 @@ public Task ExportDataAsync(string path) AlertDialogService?.AddAlertDialog(eAlertType.Success, "Exported!", "Data was successfully exported!", 10); AxoApplication.Current.Logger.Information($"Exported data from {DataExchange} to path {path} by user action.", AuthenticationProvider.GetAuthenticationStateAsync().Result.User.Identity); - } catch (Exception e) { @@ -341,12 +339,12 @@ public Task ImportDataAsync(string path) try { DataExchange.ImportData(path, AuthenticationProvider.GetAuthenticationStateAsync().Result, exportFileType: ExportSet.ExportFileType, separator: ExportSet.Separator); - this.UpdateObservableRecords(); AlertDialogService?.AddAlertDialog(eAlertType.Success, "Imported!", "Data was successfully imported!", 10); AxoApplication.Current.Logger.Information($"Imported data into {DataExchange} from path {path} by user action.", AuthenticationProvider.GetAuthenticationStateAsync().Result.User.Identity); + importStatus = eOperationStatus.Done; } catch (Exception e) { @@ -443,7 +441,6 @@ public Dictionary InDictionary(bool check) if (check) r.Add("checked", "checked"); return r; - } public bool GetFragmentsExportedValue() @@ -462,4 +459,4 @@ public bool GetFragmentsExportedValue() return true; } } -} +} \ No newline at end of file