From 8e471e278e15201c59bf9eb1a4c4600341b03d3d Mon Sep 17 00:00:00 2001 From: Mike Phares Date: Wed, 8 Feb 2023 10:53:51 -0700 Subject: [PATCH] Test Pinned via API --- .vscode/launch.json | 41 +- .vscode/tasks.json | 64 +- Client/OI.Metrology.Client.csproj | 2 +- ClientHub/App.razor.cs | 4 - ClientHub/Data/WeatherForecast.cs | 12 - ClientHub/Data/WeatherForecastService.cs | 19 - ClientHub/OI.Metrology.ClientHub.csproj | 4 +- ClientHub/Pages/AwaitingDisposition.razor | 71 --- ClientHub/Pages/AwaitingDisposition.razor.cs | 82 --- ClientHub/Pages/AwaitingDisposition.razor.js | 1 - ClientHub/Pages/Error.cshtml | 2 +- ClientHub/Pages/Error.cshtml.cs | 2 +- ClientHub/Pages/Export.razor.js | 1 - ClientHub/Pages/FetchData.razor | 41 -- ClientHub/Pages/FetchData.razor.cs | 17 - ClientHub/Pages/FetchServiceShopOrders.razor | 7 - .../Pages/FetchServiceShopOrders.razor.cs | 4 - ClientHub/Pages/Index.razor | 7 - ClientHub/Pages/Index.razor.cs | 4 - ClientHub/Pages/RunHeaders.razor.cs | 25 - ClientHub/Pages/RunHeaders.razor.js | 1 - ClientHub/Pages/RunInfo.razor.js | 1 - ClientHub/Pages/_Host.cshtml | 4 +- ClientHub/Program.cs | 9 +- ClientHub/Shared/MainLayout.razor.cs | 35 - ClientHub/Shared/NavMenu.razor.cs | 4 - ClientHub/_Imports.razor | 1 - ClientHub/wwwroot/site.js | 3 + ClientHub/wwwroot/styles/Site.css | 22 +- OI-Metrology.sln | 6 + Server/ApiControllers/PinController.cs | 44 ++ Server/Program.cs | 3 +- Server/Repositories/PinRepository.cs | 93 +++ Server/Views/Pages/AwaitingDispo.cshtml | 52 +- Server/Views/Pages/RunHeaders.cshtml | 81 +-- Server/Views/Pages/RunInfo.cshtml | 411 +----------- Server/Views/Shared/_Layout.cshtml | 1 + Server/appsettings.Development.json | 3 +- Server/wwwroot/js/site.js | 600 ++++++++++++++++++ Server/wwwroot/styles/Site.css | 86 +-- Shared/DataModels/Pinned.cs | 40 ++ Shared/Models/Stateless/IPinController.cs | 15 + Shared/Models/Stateless/IPinRepository.cs | 20 + Tests/.vscode/settings.json | 3 + Tests/OI.Metrology.Tests.csproj | 2 +- Tests/UnitTestPinController.cs | 67 ++ {ClientHub => View}/App.razor | 6 +- View/App.razor.cs | 10 + {ClientHub => View}/Models/AppSettings.cs | 2 +- .../Models/Binder/AppSettings.cs | 3 +- View/OI.Metrology.View.csproj | 23 + View/Pages/AwaitingDisposition.razor | 23 + View/Pages/AwaitingDisposition.razor.cs | 45 ++ .../Pages/AwaitingDisposition.razor.css | 0 {ClientHub => View}/Pages/Counter.razor | 2 +- {ClientHub => View}/Pages/Counter.razor.cs | 5 +- {ClientHub => View}/Pages/Export.razor | 6 +- {ClientHub => View}/Pages/Export.razor.cs | 7 +- {ClientHub => View}/Pages/Export.razor.css | 0 View/Pages/Index.razor | 15 + View/Pages/Index.razor.cs | 32 + {ClientHub => View}/Pages/RunHeaders.razor | 9 +- View/Pages/RunHeaders.razor.cs | 34 + .../Pages/RunHeaders.razor.css | 0 {ClientHub => View}/Pages/RunInfo.razor | 13 +- {ClientHub => View}/Pages/RunInfo.razor.cs | 13 +- {ClientHub => View}/Pages/RunInfo.razor.css | 0 {ClientHub => View}/Shared/MainLayout.razor | 15 +- View/Shared/MainLayout.razor.cs | 48 ++ .../Shared/MainLayout.razor.css | 0 {ClientHub => View}/Shared/NavMenu.razor | 5 +- View/Shared/NavMenu.razor.cs | 4 + {ClientHub => View}/Shared/NavMenu.razor.css | 0 73 files changed, 1375 insertions(+), 962 deletions(-) delete mode 100644 ClientHub/App.razor.cs delete mode 100644 ClientHub/Data/WeatherForecast.cs delete mode 100644 ClientHub/Data/WeatherForecastService.cs delete mode 100644 ClientHub/Pages/AwaitingDisposition.razor delete mode 100644 ClientHub/Pages/AwaitingDisposition.razor.cs delete mode 100644 ClientHub/Pages/AwaitingDisposition.razor.js delete mode 100644 ClientHub/Pages/Export.razor.js delete mode 100644 ClientHub/Pages/FetchData.razor delete mode 100644 ClientHub/Pages/FetchData.razor.cs delete mode 100644 ClientHub/Pages/FetchServiceShopOrders.razor delete mode 100644 ClientHub/Pages/FetchServiceShopOrders.razor.cs delete mode 100644 ClientHub/Pages/Index.razor delete mode 100644 ClientHub/Pages/Index.razor.cs delete mode 100644 ClientHub/Pages/RunHeaders.razor.cs delete mode 100644 ClientHub/Pages/RunHeaders.razor.js delete mode 100644 ClientHub/Pages/RunInfo.razor.js delete mode 100644 ClientHub/Shared/MainLayout.razor.cs delete mode 100644 ClientHub/Shared/NavMenu.razor.cs create mode 100644 Server/ApiControllers/PinController.cs create mode 100644 Server/Repositories/PinRepository.cs create mode 100644 Server/wwwroot/js/site.js create mode 100644 Shared/DataModels/Pinned.cs create mode 100644 Shared/Models/Stateless/IPinController.cs create mode 100644 Shared/Models/Stateless/IPinRepository.cs create mode 100644 Tests/.vscode/settings.json create mode 100644 Tests/UnitTestPinController.cs rename {ClientHub => View}/App.razor (74%) create mode 100644 View/App.razor.cs rename {ClientHub => View}/Models/AppSettings.cs (93%) rename {ClientHub => View}/Models/Binder/AppSettings.cs (96%) create mode 100644 View/OI.Metrology.View.csproj create mode 100644 View/Pages/AwaitingDisposition.razor create mode 100644 View/Pages/AwaitingDisposition.razor.cs rename {ClientHub => View}/Pages/AwaitingDisposition.razor.css (100%) rename {ClientHub => View}/Pages/Counter.razor (86%) rename {ClientHub => View}/Pages/Counter.razor.cs (75%) rename {ClientHub => View}/Pages/Export.razor (95%) rename {ClientHub => View}/Pages/Export.razor.cs (95%) rename {ClientHub => View}/Pages/Export.razor.css (100%) create mode 100644 View/Pages/Index.razor create mode 100644 View/Pages/Index.razor.cs rename {ClientHub => View}/Pages/RunHeaders.razor (71%) create mode 100644 View/Pages/RunHeaders.razor.cs rename {ClientHub => View}/Pages/RunHeaders.razor.css (100%) rename {ClientHub => View}/Pages/RunInfo.razor (77%) rename {ClientHub => View}/Pages/RunInfo.razor.cs (64%) rename {ClientHub => View}/Pages/RunInfo.razor.css (100%) rename {ClientHub => View}/Shared/MainLayout.razor (81%) create mode 100644 View/Shared/MainLayout.razor.cs rename {ClientHub => View}/Shared/MainLayout.razor.css (100%) rename {ClientHub => View}/Shared/NavMenu.razor (90%) create mode 100644 View/Shared/NavMenu.razor.cs rename {ClientHub => View}/Shared/NavMenu.razor.css (100%) diff --git a/.vscode/launch.json b/.vscode/launch.json index 95ef277..4d1d636 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -5,10 +5,10 @@ // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md - "name": ".NET Core Launch (web)", + "name": ".NET Core Launch (web) - Server", "type": "coreclr", "request": "launch", - "preLaunchTask": "build", + "preLaunchTask": "buildServer", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/Server/bin/Debug/net7.0/win-x64/OI.Metrology.Server.dll", "args": [], @@ -28,11 +28,44 @@ } }, { - "name": ".NET Core Attach", + "name": ".NET Core Attach - Server", "type": "coreclr", "request": "attach", - "preLaunchTask": "watch", + "preLaunchTask": "watchServer", "processName": "OI.Metrology.Server.exe" + }, + { + // Use IntelliSense to find out which attributes exist for C# debugging + // Use hover for the description of the existing attributes + // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md + "name": ".NET Core Launch (web) - ClientHub", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "buildClientHub", + // If you have changed target frameworks, make sure to update the program path. + "program": "${workspaceFolder}/ClientHub/bin/Debug/net7.0/win-x64/OI.Metrology.ClientHub.dll", + "args": [], + "cwd": "${workspaceFolder}/ClientHub", + "stopAtEntry": false, + // Enable launching a web browser when ASP.NET Core starts. For more information: https://aka.ms/VSCode-CS-LaunchJson-WebBrowser + "serverReadyAction": { + "action": "openExternally", + "pattern": "\\bNow listening on:\\s+(https?://\\S+)", + "uriFormat": "%s/swagger/index.html" + }, + "env": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "sourceFileMap": { + "/Views": "${workspaceFolder}/ClientHub/Views" + } + }, + { + "name": ".NET Core Attach - ClientHub", + "type": "coreclr", + "request": "attach", + "preLaunchTask": "watchClientHub", + "processName": "OI.Metrology.ClientHub.exe" } ] } \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 5e32c89..72ffadb 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -2,7 +2,7 @@ "version": "2.0.0", "tasks": [ { - "label": "build", + "label": "buildServer", "command": "dotnet", "type": "process", "args": [ @@ -14,7 +14,7 @@ "problemMatcher": "$msCompile" }, { - "label": "publish", + "label": "publishServer", "command": "dotnet", "type": "process", "args": [ @@ -38,7 +38,7 @@ "problemMatcher": "$msCompile" }, { - "label": "watch", + "label": "watchServer", "command": "dotnet", "type": "process", "args": [ @@ -70,6 +70,64 @@ "endsPattern": "^.*Application started.*" } } + }, + { + "label": "buildClientHub", + "command": "dotnet", + "type": "process", + "args": [ + "build", + "${workspaceFolder}/ClientHub/OI.Metrology.ClientHub.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "publishClientHub", + "command": "dotnet", + "type": "process", + "args": [ + "publish", + "${workspaceFolder}/ClientHub/OI.Metrology.ClientHub.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "watchClientHub", + "command": "dotnet", + "type": "process", + "args": [ + "watch", + "--launch-profile", + "http", + "run", + "--project", + "${workspaceFolder}/ClientHub/OI.Metrology.ClientHub.csproj", + "--verbose" + ], + "isBackground": true, + "dependsOn": [ + "build" + ], + "problemMatcher": { + "fileLocation": "relative", + "pattern": { + "regexp": "^([^\\s].*)\\((\\d+|\\d+,\\d+|\\d+,\\d+,\\d+,\\d+)\\):\\s+(error|warning|info)\\s+(TS\\d+)\\s*:\\s*(.*)$", + "file": 1, + "location": 2, + "severity": 3, + "code": 4, + "message": 5 + }, + "background": { + "activeOnStart": true, + "beginsPattern": "^.*Shutdown requested.*", + "endsPattern": "^.*Application started.*" + } + } } ] } \ No newline at end of file diff --git a/Client/OI.Metrology.Client.csproj b/Client/OI.Metrology.Client.csproj index 95ae203..2a9d43b 100644 --- a/Client/OI.Metrology.Client.csproj +++ b/Client/OI.Metrology.Client.csproj @@ -14,7 +14,7 @@ - + diff --git a/ClientHub/App.razor.cs b/ClientHub/App.razor.cs deleted file mode 100644 index 90c9fcb..0000000 --- a/ClientHub/App.razor.cs +++ /dev/null @@ -1,4 +0,0 @@ -namespace OI.Metrology.ClientHub; - -public partial class App -{ } \ No newline at end of file diff --git a/ClientHub/Data/WeatherForecast.cs b/ClientHub/Data/WeatherForecast.cs deleted file mode 100644 index f670038..0000000 --- a/ClientHub/Data/WeatherForecast.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace OI.Metrology.ClientHub.Data; - -public class WeatherForecast -{ - public DateOnly Date { get; set; } - - public int TemperatureC { get; set; } - - public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); - - public string? Summary { get; set; } -} \ No newline at end of file diff --git a/ClientHub/Data/WeatherForecastService.cs b/ClientHub/Data/WeatherForecastService.cs deleted file mode 100644 index 24178d6..0000000 --- a/ClientHub/Data/WeatherForecastService.cs +++ /dev/null @@ -1,19 +0,0 @@ -namespace OI.Metrology.ClientHub.Data; - -public class WeatherForecastService -{ - private static readonly string[] _Summaries = new[] - { - "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" - }; - - public Task GetForecastAsync(DateOnly startDate) - { - return Task.FromResult(Enumerable.Range(1, 5).Select(index => new WeatherForecast - { - Date = startDate.AddDays(index), - TemperatureC = Random.Shared.Next(-20, 55), - Summary = _Summaries[Random.Shared.Next(_Summaries.Length)] - }).ToArray()); - } -} \ No newline at end of file diff --git a/ClientHub/OI.Metrology.ClientHub.csproj b/ClientHub/OI.Metrology.ClientHub.csproj index 5277eae..405ce38 100644 --- a/ClientHub/OI.Metrology.ClientHub.csproj +++ b/ClientHub/OI.Metrology.ClientHub.csproj @@ -6,12 +6,14 @@ win-x64 - + + + \ No newline at end of file diff --git a/ClientHub/Pages/AwaitingDisposition.razor b/ClientHub/Pages/AwaitingDisposition.razor deleted file mode 100644 index 50524df..0000000 --- a/ClientHub/Pages/AwaitingDisposition.razor +++ /dev/null @@ -1,71 +0,0 @@ -@page "/" -@page "/AwaitingDisposition" - -@using Microsoft.AspNetCore.Components.Web -@using MudBlazor - -@namespace OI.Metrology.ClientHub.Pages - -Awaiting Disposition -

Awaiting Disposition

- -
-
-
- -
-
- Open -
-
- Refresh -
-
- View -
-
- -@if (_Records == null) -{ - -} -else if (_Records.Any()) -{ - - - - - - - - - - - - ToolType - Tool - Reactor - RDS - PSN - Layer - Zone - InsertDate - Expiration - - - @context.ToolType - @context.Tool - @context.Reactor - @context.RDS - @context.PSN - @context.Layer - @context.Zone - @context.InsertDate - @context.Expiration - - -} - - \ No newline at end of file diff --git a/ClientHub/Pages/AwaitingDisposition.razor.cs b/ClientHub/Pages/AwaitingDisposition.razor.cs deleted file mode 100644 index b74e18d..0000000 --- a/ClientHub/Pages/AwaitingDisposition.razor.cs +++ /dev/null @@ -1,82 +0,0 @@ -using Microsoft.AspNetCore.Components; -using Microsoft.JSInterop; -using OI.Metrology.ClientHub.Models; -using OI.Metrology.Shared.Models.Stateless; - -namespace OI.Metrology.ClientHub.Pages; - -public partial class AwaitingDisposition -{ - - [Inject] protected IJSRuntime? JSRuntime { get; set; } - [Inject] protected HttpClient? HttpClient { get; set; } - [Inject] protected AppSettings? AppSettings { get; set; } - [Inject] protected ILogger? Logger { get; set; } - - private string? _ToolTypeFilter; - private string? _ToolFilter; - private string? _ReactorFilter; - private string? _RdsFilter; - private string? _PSNFilter; - private string? _LayerFilter; - private string? _ZoneFilter; - private readonly List _Records; - - public AwaitingDisposition() => _Records = new(); - - protected override Task OnAfterRenderAsync(bool firstRender) - { - if (firstRender) - { - if (JSRuntime is null) - throw new NullReferenceException(nameof(JSRuntime)); - if (AppSettings is null) - throw new NullReferenceException(nameof(AppSettings)); - return JSRuntime.InvokeVoidAsync("initAwaitingDisposition", AppSettings.ApiUrl).AsTask(); - } - return Task.CompletedTask; - } - - private bool FilterRecords(Metrology.Shared.DataModels.AwaitingDisposition? record) - { - bool? result = _ToolTypeFilter is not null ? record?.ToolType?.Contains(_ToolTypeFilter, StringComparison.CurrentCultureIgnoreCase) : null; - if (result is null || result.Value) - result = _ToolFilter is not null ? record?.Tool?.Contains(_ToolFilter, StringComparison.CurrentCultureIgnoreCase) : null; - if (result is null || result.Value) - result = _ReactorFilter is not null ? record?.Reactor?.Contains(_ReactorFilter, StringComparison.CurrentCultureIgnoreCase) : null; - if (result is null || result.Value) - result = _RdsFilter is not null ? record?.RDS?.Contains(_RdsFilter, StringComparison.CurrentCultureIgnoreCase) : null; - if (result is null || result.Value) - result = _PSNFilter is not null ? record?.PSN?.Contains(_PSNFilter, StringComparison.CurrentCultureIgnoreCase) : null; - if (result is null || result.Value) - result = _LayerFilter is not null ? record?.Layer?.Contains(_LayerFilter, StringComparison.CurrentCultureIgnoreCase) : null; - if (result is null || result.Value) - result = _ZoneFilter is not null ? record?.Zone?.Contains(_ZoneFilter, StringComparison.CurrentCultureIgnoreCase) : null; - result ??= true; - return result.Value; - } - - private void RefreshClick() => _Records.Clear(); - - private async Task LoadClickAsync() - { - if (Logger is null) - throw new NullReferenceException(nameof(Logger)); - if (HttpClient is null) - throw new NullReferenceException(nameof(HttpClient)); - _Records.Clear(); - string controllerName = IAwaitingDispoController.GetRouteName(); - try - { - Metrology.Shared.DataModels.AwaitingDisposition[]? collection = await HttpClient.GetFromJsonAsync($"api/{controllerName}"); - if (collection is not null) - _Records.AddRange(collection); - } - catch (Exception) - { - string json = await HttpClient.GetStringAsync($"api/{controllerName}"); - Logger.LogInformation(message: json); - } - } - -} \ No newline at end of file diff --git a/ClientHub/Pages/AwaitingDisposition.razor.js b/ClientHub/Pages/AwaitingDisposition.razor.js deleted file mode 100644 index 5f28270..0000000 --- a/ClientHub/Pages/AwaitingDisposition.razor.js +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ClientHub/Pages/Error.cshtml b/ClientHub/Pages/Error.cshtml index 3bd7411..432b20b 100644 --- a/ClientHub/Pages/Error.cshtml +++ b/ClientHub/Pages/Error.cshtml @@ -1,4 +1,4 @@ -@page +@page @model OI.Metrology.ClientHub.Pages.ErrorModel diff --git a/ClientHub/Pages/Error.cshtml.cs b/ClientHub/Pages/Error.cshtml.cs index 7f66220..6f45b9b 100644 --- a/ClientHub/Pages/Error.cshtml.cs +++ b/ClientHub/Pages/Error.cshtml.cs @@ -1,4 +1,4 @@ -using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using System.Diagnostics; diff --git a/ClientHub/Pages/Export.razor.js b/ClientHub/Pages/Export.razor.js deleted file mode 100644 index 5f28270..0000000 --- a/ClientHub/Pages/Export.razor.js +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ClientHub/Pages/FetchData.razor b/ClientHub/Pages/FetchData.razor deleted file mode 100644 index 7fe4d4e..0000000 --- a/ClientHub/Pages/FetchData.razor +++ /dev/null @@ -1,41 +0,0 @@ -@page "/fetchdata" - -@using OI.Metrology.ClientHub.Data -@using Microsoft.AspNetCore.Components.Web - -@namespace OI.Metrology.ClientHub.Pages - -Weather forecast - -

Weather forecast

- -

This component demonstrates fetching data from a service.

- -@if (_WeatherForecasts is null) -{ -

Loading...

-} -else -{ - - - - - - - - - - - @foreach (WeatherForecast weatherForecast in _WeatherForecasts) - { - - - - - - - } - -
DateTemp. (C)Temp. (F)Summary
@weatherForecast.Date.ToShortDateString()@weatherForecast.TemperatureC@weatherForecast.TemperatureF@weatherForecast.Summary
-} diff --git a/ClientHub/Pages/FetchData.razor.cs b/ClientHub/Pages/FetchData.razor.cs deleted file mode 100644 index f24a0a5..0000000 --- a/ClientHub/Pages/FetchData.razor.cs +++ /dev/null @@ -1,17 +0,0 @@ -using Microsoft.AspNetCore.Components; -using OI.Metrology.ClientHub.Data; - -namespace OI.Metrology.ClientHub.Pages; - -public partial class FetchData -{ - private WeatherForecast[]? _WeatherForecasts; - [Inject] protected WeatherForecastService? ForecastService { get; set; } - - protected override async Task OnInitializedAsync() - { - if (ForecastService is null) - throw new NullReferenceException(nameof(ForecastService)); - _WeatherForecasts = await ForecastService.GetForecastAsync(DateOnly.FromDateTime(DateTime.Now)); - } -} \ No newline at end of file diff --git a/ClientHub/Pages/FetchServiceShopOrders.razor b/ClientHub/Pages/FetchServiceShopOrders.razor deleted file mode 100644 index ed3b8fd..0000000 --- a/ClientHub/Pages/FetchServiceShopOrders.razor +++ /dev/null @@ -1,7 +0,0 @@ -@page "/fetchServiceShoporders" - -@using Microsoft.AspNetCore.Components.Web - -@namespace OI.Metrology.ClientHub.Pages - -Service-Shop Orders \ No newline at end of file diff --git a/ClientHub/Pages/FetchServiceShopOrders.razor.cs b/ClientHub/Pages/FetchServiceShopOrders.razor.cs deleted file mode 100644 index 87dd81c..0000000 --- a/ClientHub/Pages/FetchServiceShopOrders.razor.cs +++ /dev/null @@ -1,4 +0,0 @@ -namespace OI.Metrology.ClientHub.Pages; - -public partial class FetchServiceShopOrders -{ } \ No newline at end of file diff --git a/ClientHub/Pages/Index.razor b/ClientHub/Pages/Index.razor deleted file mode 100644 index 9129765..0000000 --- a/ClientHub/Pages/Index.razor +++ /dev/null @@ -1,7 +0,0 @@ -@page "/Index" - -@using Microsoft.AspNetCore.Components.Web - -@namespace OI.Metrology.ClientHub.Pages - -Index diff --git a/ClientHub/Pages/Index.razor.cs b/ClientHub/Pages/Index.razor.cs deleted file mode 100644 index 9ff4a5e..0000000 --- a/ClientHub/Pages/Index.razor.cs +++ /dev/null @@ -1,4 +0,0 @@ -namespace OI.Metrology.ClientHub.Pages; - -public partial class Index -{ } \ No newline at end of file diff --git a/ClientHub/Pages/RunHeaders.razor.cs b/ClientHub/Pages/RunHeaders.razor.cs deleted file mode 100644 index e068a0f..0000000 --- a/ClientHub/Pages/RunHeaders.razor.cs +++ /dev/null @@ -1,25 +0,0 @@ -using Microsoft.AspNetCore.Components; -using Microsoft.JSInterop; - -namespace OI.Metrology.ClientHub.Pages; - -public partial class RunHeaders -{ - - [Inject] protected IJSRuntime? JSRuntime { get; set; } - [Inject] protected Models.AppSettings? AppSettings { get; set; } - - protected override Task OnAfterRenderAsync(bool firstRender) - { - if (firstRender) - { - if (JSRuntime is null) - throw new NullReferenceException(nameof(JSRuntime)); - if (AppSettings is null) - throw new NullReferenceException(nameof(AppSettings)); - return JSRuntime.InvokeVoidAsync("initRunHeaders", AppSettings.ApiUrl).AsTask(); - } - return Task.CompletedTask; - } - -} \ No newline at end of file diff --git a/ClientHub/Pages/RunHeaders.razor.js b/ClientHub/Pages/RunHeaders.razor.js deleted file mode 100644 index 5f28270..0000000 --- a/ClientHub/Pages/RunHeaders.razor.js +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ClientHub/Pages/RunInfo.razor.js b/ClientHub/Pages/RunInfo.razor.js deleted file mode 100644 index 5f28270..0000000 --- a/ClientHub/Pages/RunInfo.razor.js +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ClientHub/Pages/_Host.cshtml b/ClientHub/Pages/_Host.cshtml index d2ebf58..d09286c 100644 --- a/ClientHub/Pages/_Host.cshtml +++ b/ClientHub/Pages/_Host.cshtml @@ -25,6 +25,7 @@ + @@ -47,7 +48,7 @@ - +
@@ -62,6 +63,7 @@ + diff --git a/ClientHub/Program.cs b/ClientHub/Program.cs index e3b7caf..4c801d7 100644 --- a/ClientHub/Program.cs +++ b/ClientHub/Program.cs @@ -1,6 +1,6 @@ +using IgniteUI.Blazor.Controls; +using OI.Metrology.View.Models; using MudBlazor.Services; -using OI.Metrology.ClientHub.Data; -using OI.Metrology.ClientHub.Models; using Serilog; using Serilog.Core; @@ -21,16 +21,15 @@ internal class Program Serilog.ILogger log = Log.ForContext(); try { - AppSettings appSettings = Models.Binder.AppSettings.Get(builder.Configuration); + AppSettings appSettings = View.Models.Binder.AppSettings.Get(builder.Configuration); // Add services to the container. _ = builder.Services.AddRazorPages(); _ = builder.Services.AddMudServices(); + _ = builder.Services.AddIgniteUIBlazor(typeof(IgbIconModule)); _ = builder.Services.AddServerSideBlazor(); _ = builder.Services.AddHttpContextAccessor(); _ = builder.Services.AddSingleton(_ => appSettings); - _ = builder.Services.AddSingleton(); - _ = builder.Services.AddSingleton(); _ = builder.Services.AddScoped(serviceProvider => new HttpClient { BaseAddress = new Uri(appSettings.ApiUrl) }); WebApplication app = builder.Build(); diff --git a/ClientHub/Shared/MainLayout.razor.cs b/ClientHub/Shared/MainLayout.razor.cs deleted file mode 100644 index 4f9d334..0000000 --- a/ClientHub/Shared/MainLayout.razor.cs +++ /dev/null @@ -1,35 +0,0 @@ -using Microsoft.AspNetCore.Components; -using MudBlazor; -using System.Diagnostics; - -namespace OI.Metrology.ClientHub.Shared; - -public partial class MainLayout -{ - - bool _DrawerOpen = true; - private bool _IsDarkMode; - private string? _RequestId; - private MudThemeProvider? _MudThemeProvider; - - [Inject] protected Models.AppSettings? AppSettings { get; set; } - [Inject] protected IHttpContextAccessor? HttpContextAccessor { get; set; } - - void DrawerToggle() => _DrawerOpen = !_DrawerOpen; - - protected override void OnParametersSet() - { - base.OnParametersSet(); - _RequestId = Activity.Current?.Id ?? HttpContextAccessor?.HttpContext?.TraceIdentifier; - } - - protected override async Task OnAfterRenderAsync(bool firstRender) - { - if (firstRender && _MudThemeProvider is not null) - { - _IsDarkMode = await _MudThemeProvider.GetSystemPreference(); - StateHasChanged(); - } - } - -} \ No newline at end of file diff --git a/ClientHub/Shared/NavMenu.razor.cs b/ClientHub/Shared/NavMenu.razor.cs deleted file mode 100644 index b5101eb..0000000 --- a/ClientHub/Shared/NavMenu.razor.cs +++ /dev/null @@ -1,4 +0,0 @@ -namespace OI.Metrology.ClientHub.Shared; - -public partial class NavMenu -{ } \ No newline at end of file diff --git a/ClientHub/_Imports.razor b/ClientHub/_Imports.razor index a548560..e2df7fc 100644 --- a/ClientHub/_Imports.razor +++ b/ClientHub/_Imports.razor @@ -7,4 +7,3 @@ @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.JSInterop @using OI.Metrology.ClientHub -@using OI.Metrology.ClientHub.Shared diff --git a/ClientHub/wwwroot/site.js b/ClientHub/wwwroot/site.js index 0998664..4fae8ef 100644 --- a/ClientHub/wwwroot/site.js +++ b/ClientHub/wwwroot/site.js @@ -545,4 +545,7 @@ function triggerFileDownload(fileName, url) { anchorElement.download = fileName ?? ''; anchorElement.click(); anchorElement.remove(); +} + +function initIndex(){ } \ No newline at end of file diff --git a/ClientHub/wwwroot/styles/Site.css b/ClientHub/wwwroot/styles/Site.css index 7082f4e..7c35d14 100644 --- a/ClientHub/wwwroot/styles/Site.css +++ b/ClientHub/wwwroot/styles/Site.css @@ -1,7 +1,6 @@ body { padding-top: 50px; padding-bottom: 20px; - background-color: darkgrey; } /* Set padding to keep content from hitting the edges */ @@ -71,6 +70,25 @@ div.modal-content-warning { background-color: red !important; } +.prod-database { + background-color: #d7d7d7 !important; +} + +/* hover */ +.ui-iggrid td.ui-state-hover, +.ui-iggrid .ui-ig-altrecord td.ui-state-hover, +.ui-iggrid .ui-ig-altrecord td.ui-state-default.ui-state-hover, +.ui-iggrid th.ui-iggrid-rowselector-class.ui-state-hover, +.ui-iggrid .ui-ig-altrecord th.ui-iggrid-rowselector-class.ui-state-hover, +.ui-iggrid .ui-ig-altrecord th.ui-iggrid-rowselector-class.ui-state-default.ui-state-hover, +.ui-iggrid-responsive-vertical tr > td.ui-state-hover:first-child, +.ui-iggrid-responsive-vertical tr.ui-ig-altrecord > td.ui-state-hover:first-child { + color: #333333; + background: #f5ff3b; + border-top: 1px solid transparent; + border-bottom: 1px solid #ddd; +} + .test-database .navbar-brand, .test-database .navbar-text, .test-database .navbar-nav > li > a { @@ -107,4 +125,4 @@ div.modal-content-warning { #ExportData { zoom: 2; -} \ No newline at end of file +} diff --git a/OI-Metrology.sln b/OI-Metrology.sln index 3ecee65..e8a893a 100644 --- a/OI-Metrology.sln +++ b/OI-Metrology.sln @@ -7,6 +7,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Archive", "Archive\OI.Metro EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shared", "Shared\OI.Metrology.Shared.csproj", "{A807EAE3-7DCB-4E5E-BE54-0D7410D18B3E}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "View", "View\OI.Metrology.View.csproj", "{D7988D0C-FE5D-429B-AA1C-911A1A29A468}" +EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Server", "Server\OI.Metrology.Server.csproj", "{25C86DF8-EC1A-4D4B-AD4E-6561174824B9}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests", "Tests\OI.Metrology.Tests.csproj", "{B67FB8C4-402E-4D53-90A6-90F6FDB9D082}" @@ -36,5 +38,9 @@ Global {B67FB8C4-402E-4D53-90A6-90F6FDB9D082}.Debug|Any CPU.Build.0 = Debug|Any CPU {B67FB8C4-402E-4D53-90A6-90F6FDB9D082}.Release|Any CPU.ActiveCfg = Release|Any CPU {B67FB8C4-402E-4D53-90A6-90F6FDB9D082}.Release|Any CPU.Build.0 = Release|Any CPU + {D7988D0C-FE5D-429B-AA1C-911A1A29A468}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D7988D0C-FE5D-429B-AA1C-911A1A29A468}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D7988D0C-FE5D-429B-AA1C-911A1A29A468}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D7988D0C-FE5D-429B-AA1C-911A1A29A468}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection EndGlobal diff --git a/Server/ApiControllers/PinController.cs b/Server/ApiControllers/PinController.cs new file mode 100644 index 0000000..82b26eb --- /dev/null +++ b/Server/ApiControllers/PinController.cs @@ -0,0 +1,44 @@ +using Microsoft.AspNetCore.Mvc; + +namespace OI.Metrology.Server.ApiControllers; + +using OI.Metrology.Shared.Models.Stateless; +using System.Text.Json; + +[Route("api/[controller]")] +public class PinController : Controller, IPinController +{ + + private readonly ILogger _Logger; + private readonly IPinRepository _PinRepository; + private readonly IMetrologyRepository _MetrologyRepository; + + public PinController(ILogger logger, IMetrologyRepository metrologyRepository, IPinRepository pinRepository) + { + _Logger = logger; + _MetrologyRepository = metrologyRepository; + _PinRepository = pinRepository; + } + + [HttpPost("/api/pin/markAsPinned")] + public IActionResult MarkAsPinned(Shared.DataModels.HeaderCommon headerCommon) + { + string toolTypeId = headerCommon.ToolTypeID.ToString(); + string json = JsonSerializer.Serialize(headerCommon, new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true }); + string? was = HttpContext.Session.GetString(toolTypeId); + if (was is not null) + _Logger.LogDebug($"{toolTypeId} was: {was}"); + HttpContext.Session.SetString(toolTypeId, json); + return Ok(); + } + + [HttpGet] + [Route("{id}/pinned")] + public IActionResult GetPinnedTable(int id) + { + string? cde = HttpContext.Session.GetString(((int)IPinRepository.ToolId.CDE).ToString()); + string? bioRad = HttpContext.Session.GetString(((int)IPinRepository.ToolId.BioRad).ToString()); + return Json(_PinRepository.GetPinnedTable(_MetrologyRepository, id, bioRad, cde), new JsonSerializerOptions { PropertyNamingPolicy = null, WriteIndented = true }); + } + +} \ No newline at end of file diff --git a/Server/Program.cs b/Server/Program.cs index 12cbdb0..13ff438 100644 --- a/Server/Program.cs +++ b/Server/Program.cs @@ -67,11 +67,12 @@ public class Program _ = webApplicationBuilder.Services.AddSingleton(_ => appSettings); _ = webApplicationBuilder.Services.AddSingleton(); - _ = webApplicationBuilder.Services.AddSingleton>(_ => appSettingsRepository); _ = webApplicationBuilder.Services.AddSingleton(_ => clientSettingsRepository); _ = webApplicationBuilder.Services.AddSingleton(); + _ = webApplicationBuilder.Services.AddSingleton(_ => new(appSettings.MockRoot)); _ = webApplicationBuilder.Services.AddSingleton(_ => sqlDbConnectionFactory); _ = webApplicationBuilder.Services.AddSingleton(_ => new(appSettings.MockRoot)); + _ = webApplicationBuilder.Services.AddSingleton>(_ => appSettingsRepository); _ = webApplicationBuilder.Services.AddScoped(); _ = webApplicationBuilder.Services.AddScoped(); diff --git a/Server/Repositories/PinRepository.cs b/Server/Repositories/PinRepository.cs new file mode 100644 index 0000000..8897818 --- /dev/null +++ b/Server/Repositories/PinRepository.cs @@ -0,0 +1,93 @@ +using OI.Metrology.Shared.DataModels; +using OI.Metrology.Shared.Models.Stateless; +using System.Text.Json; + +namespace OI.Metrology.Server.Repository; + +public class PinRepository : IPinRepository +{ + + private readonly string _MockRoot; + private readonly Serilog.ILogger _Log; + + public PinRepository(string mockRoot) + { + _MockRoot = mockRoot; + _Log = Serilog.Log.ForContext(); + } + + Result IPinRepository.GetPinnedTable(IMetrologyRepository metrologyRepository, int id, string? bioRad, string? cde) + { + Result? r; + HeaderCommon? cdeHeader = cde is null ? null : JsonSerializer.Deserialize(cde); + long cdeId = cdeHeader is null ? (long)IPinRepository.ToolId.CDE : cdeHeader.ToolTypeID; + HeaderCommon? bioRadHeader = bioRad is null ? null : JsonSerializer.Deserialize(bioRad); + long bioRadId = bioRadHeader is null ? (long)IPinRepository.ToolId.BioRad : bioRadHeader.ToolTypeID; + if (cdeId != id && bioRadId != id) + r = new() { Results = Array.Empty(), TotalRows = 0 }; + else + { + if (!string.IsNullOrEmpty(_MockRoot)) + { + string json = File.ReadAllText(Path.Combine(string.Concat(AppContext.BaseDirectory, _MockRoot), "GetPinnedTableApi.json")); + r = JsonSerializer.Deserialize>(json); + if (r is null) + throw new NullReferenceException(nameof(r)); + } + else + { + List values; + const int points = 9; + Pinned headerCommond; + List results = new(); + if (bioRadHeader is not null) + { + const int thickness = 5; + System.Data.DataTable dataTable = metrologyRepository.GetData((int)bioRadHeader.ToolTypeID, bioRadHeader.ID); + if (dataTable.Rows.Count > points && dataTable.Columns.Count > thickness) + { + values = new(); + for (int i = 0; i < dataTable.Rows.Count - 1; i++) + { + if (dataTable.Rows[i]?.ItemArray[thickness] is null) + break; + values.Add(string.Concat(dataTable.Rows[i].ItemArray[thickness])); + } + if (values.Count > points) + { + headerCommond = new(bioRadHeader, values); + results.Add(headerCommond); + } + } + } + if (cdeHeader is not null) + { + const int rs = 6; + System.Data.DataTable dataTable = metrologyRepository.GetData((int)cdeHeader.ToolTypeID, cdeHeader.ID); + if (dataTable.Rows.Count > points && dataTable.Columns.Count > rs) + { + values = new(); + for (int i = 0; i < dataTable.Rows.Count - 1; i++) + { + if (dataTable.Rows[i]?.ItemArray[rs] is null) + break; + values.Add(string.Concat(dataTable.Rows[i].ItemArray[rs])); + } + if (values.Count > points) + { + headerCommond = new(cdeHeader, values); + results.Add(headerCommond); + } + } + } + r = new() + { + Results = results.ToArray(), + TotalRows = results.Count, + }; + } + } + return r; + } + +} \ No newline at end of file diff --git a/Server/Views/Pages/AwaitingDispo.cshtml b/Server/Views/Pages/AwaitingDispo.cshtml index 4b4be73..0c3e6b2 100644 --- a/Server/Views/Pages/AwaitingDispo.cshtml +++ b/Server/Views/Pages/AwaitingDispo.cshtml @@ -18,59 +18,11 @@
diff --git a/Server/Views/Pages/RunHeaders.cshtml b/Server/Views/Pages/RunHeaders.cshtml index ba1a5de..2173c66 100644 --- a/Server/Views/Pages/RunHeaders.cshtml +++ b/Server/Views/Pages/RunHeaders.cshtml @@ -48,87 +48,10 @@ diff --git a/Server/Views/Pages/RunInfo.cshtml b/Server/Views/Pages/RunInfo.cshtml index d993c9b..a72998a 100644 --- a/Server/Views/Pages/RunInfo.cshtml +++ b/Server/Views/Pages/RunInfo.cshtml @@ -49,6 +49,9 @@
+
+ +
+
+
+
+
+
+ + \ No newline at end of file diff --git a/View/Pages/AwaitingDisposition.razor.cs b/View/Pages/AwaitingDisposition.razor.cs new file mode 100644 index 0000000..8b50a60 --- /dev/null +++ b/View/Pages/AwaitingDisposition.razor.cs @@ -0,0 +1,45 @@ +// using IgniteUI.Blazor.Controls; +using Microsoft.AspNetCore.Components; +using Microsoft.Extensions.Logging; +using Microsoft.JSInterop; +using OI.Metrology.View.Models; + +namespace OI.Metrology.View; + +public partial class AwaitingDisposition +{ + + // protected IgbIcon? OpenIconRef { get; set; } + // protected IgbIcon? RefreshIconRef { get; set; } + + [Inject] protected IJSRuntime? JSRuntime { get; set; } + [Inject] protected HttpClient? HttpClient { get; set; } + [Inject] protected AppSettings? AppSettings { get; set; } + [Inject] protected ILogger? Logger { get; set; } + + protected override Task OnAfterRenderAsync(bool firstRender) + { + // if (firstRender && OpenIconRef is not null) + // { + // const string svg = "Jump Down IconA picture showing a bent arrow pointing down towards a line."; + // _ = OpenIconRef.EnsureReady().ContinueWith(new Action((e) => + // OpenIconRef.RegisterIconFromTextAsync("jump-down", svg, "material"))); + // } + // if (firstRender && RefreshIconRef is not null) + // { + // const string svg = "System Update IconA picture depicting a computer screen with a reload symbol in the middle."; + // _ = RefreshIconRef.EnsureReady().ContinueWith(new Action((e) => + // RefreshIconRef.RegisterIconFromTextAsync("system-update", svg, "material"))); + // } + if (firstRender) + { + if (JSRuntime is null) + throw new NullReferenceException(nameof(JSRuntime)); + if (AppSettings is null) + throw new NullReferenceException(nameof(AppSettings)); + return JSRuntime.InvokeVoidAsync("initAwaitingDisposition", AppSettings.ApiUrl).AsTask(); + } + return Task.CompletedTask; + } + +} \ No newline at end of file diff --git a/ClientHub/Pages/AwaitingDisposition.razor.css b/View/Pages/AwaitingDisposition.razor.css similarity index 100% rename from ClientHub/Pages/AwaitingDisposition.razor.css rename to View/Pages/AwaitingDisposition.razor.css diff --git a/ClientHub/Pages/Counter.razor b/View/Pages/Counter.razor similarity index 86% rename from ClientHub/Pages/Counter.razor rename to View/Pages/Counter.razor index c628543..08b9e8a 100644 --- a/ClientHub/Pages/Counter.razor +++ b/View/Pages/Counter.razor @@ -2,7 +2,7 @@ @using Microsoft.AspNetCore.Components.Web -@namespace OI.Metrology.ClientHub.Pages +@namespace OI.Metrology.View.Pages Counter diff --git a/ClientHub/Pages/Counter.razor.cs b/View/Pages/Counter.razor.cs similarity index 75% rename from ClientHub/Pages/Counter.razor.cs rename to View/Pages/Counter.razor.cs index 3348f8c..219f0e5 100644 --- a/ClientHub/Pages/Counter.razor.cs +++ b/View/Pages/Counter.razor.cs @@ -1,6 +1,7 @@ -using Microsoft.AspNetCore.Components; +using Microsoft.Extensions.Logging; +using Microsoft.AspNetCore.Components; -namespace OI.Metrology.ClientHub.Pages; +namespace OI.Metrology.View.Pages; public partial class Counter { diff --git a/ClientHub/Pages/Export.razor b/View/Pages/Export.razor similarity index 95% rename from ClientHub/Pages/Export.razor rename to View/Pages/Export.razor index 2e01744..31d7080 100644 --- a/ClientHub/Pages/Export.razor +++ b/View/Pages/Export.razor @@ -1,10 +1,10 @@ -@page "/Export" +@page "/Export" -@using Microsoft.AspNetCore.Components.Web @using MudBlazor +@using Microsoft.AspNetCore.Components.Web @using OI.Metrology.Shared.DataModels -@namespace OI.Metrology.ClientHub.Pages +@namespace OI.Metrology.View Export Data diff --git a/ClientHub/Pages/Export.razor.cs b/View/Pages/Export.razor.cs similarity index 95% rename from ClientHub/Pages/Export.razor.cs rename to View/Pages/Export.razor.cs index 4ac3f38..6cd6b64 100644 --- a/ClientHub/Pages/Export.razor.cs +++ b/View/Pages/Export.razor.cs @@ -1,11 +1,14 @@ -using Microsoft.AspNetCore.Components; +using IgniteUI.Blazor.Controls; +using Microsoft.AspNetCore.Components; +using Microsoft.Extensions.Logging; using Microsoft.JSInterop; using MudBlazor; using OI.Metrology.Shared.DataModels; using OI.Metrology.Shared.Models.Stateless; using System.Net; +using System.Net.Http.Json; -namespace OI.Metrology.ClientHub.Pages; +namespace OI.Metrology.View; public partial class Export { diff --git a/ClientHub/Pages/Export.razor.css b/View/Pages/Export.razor.css similarity index 100% rename from ClientHub/Pages/Export.razor.css rename to View/Pages/Export.razor.css diff --git a/View/Pages/Index.razor b/View/Pages/Index.razor new file mode 100644 index 0000000..6f73a56 --- /dev/null +++ b/View/Pages/Index.razor @@ -0,0 +1,15 @@ +@page "/index" + +@using Microsoft.AspNetCore.Components.Web +@using IgniteUI.Blazor.Controls + +@namespace OI.Metrology.View + +Index + + + + + + Start Slot + diff --git a/View/Pages/Index.razor.cs b/View/Pages/Index.razor.cs new file mode 100644 index 0000000..60d6342 --- /dev/null +++ b/View/Pages/Index.razor.cs @@ -0,0 +1,32 @@ +using IgniteUI.Blazor.Controls; +using Microsoft.AspNetCore.Components; +using Microsoft.JSInterop; + +namespace OI.Metrology.View; + +public partial class Index +{ + + [Inject] protected IJSRuntime? JSRuntime { get; set; } + + protected IgbIcon? BrushIconRef { get; set; } + + protected override Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender && BrushIconRef is not null) + { + string refreshIcon = ""; + string brushIcon = "Brush IconA picture showing a painting brush."; + _ = BrushIconRef.EnsureReady().ContinueWith(new Action((e) => + BrushIconRef.RegisterIconFromTextAsync("brush", brushIcon, "material"))); + } + if (firstRender) + { + if (JSRuntime is null) + throw new NullReferenceException(nameof(JSRuntime)); + return JSRuntime.InvokeVoidAsync("initIndex").AsTask(); + } + return Task.CompletedTask; + } + +} \ No newline at end of file diff --git a/ClientHub/Pages/RunHeaders.razor b/View/Pages/RunHeaders.razor similarity index 71% rename from ClientHub/Pages/RunHeaders.razor rename to View/Pages/RunHeaders.razor index 103d3a6..02fda83 100644 --- a/ClientHub/Pages/RunHeaders.razor +++ b/View/Pages/RunHeaders.razor @@ -1,9 +1,8 @@ -@page "/RunHeaders" +@page "/RunHeaders" @using Microsoft.AspNetCore.Components.Web -@using MudBlazor -@namespace OI.Metrology.ClientHub.Pages +@namespace OI.Metrology.View Run Headers @@ -33,9 +32,9 @@
- Open +
- Refresh +
\ No newline at end of file diff --git a/View/Pages/RunHeaders.razor.cs b/View/Pages/RunHeaders.razor.cs new file mode 100644 index 0000000..412adfc --- /dev/null +++ b/View/Pages/RunHeaders.razor.cs @@ -0,0 +1,34 @@ +using IgniteUI.Blazor.Controls; +using Microsoft.AspNetCore.Components; +using Microsoft.JSInterop; + +namespace OI.Metrology.View; + +public partial class RunHeaders +{ + + protected IgbIcon? IconRef { get; set; } + + [Inject] protected IJSRuntime? JSRuntime { get; set; } + [Inject] protected Models.AppSettings? AppSettings { get; set; } + + protected override Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender && IconRef is not null) + { + const string buildIcon = ""; + _ = IconRef.EnsureReady().ContinueWith(new Action((e) => + IconRef.RegisterIconFromTextAsync("build", buildIcon, "material"))); + } + if (firstRender) + { + if (JSRuntime is null) + throw new NullReferenceException(nameof(JSRuntime)); + if (AppSettings is null) + throw new NullReferenceException(nameof(AppSettings)); + return JSRuntime.InvokeVoidAsync("initRunHeaders", AppSettings.ApiUrl).AsTask(); + } + return Task.CompletedTask; + } + +} \ No newline at end of file diff --git a/ClientHub/Pages/RunHeaders.razor.css b/View/Pages/RunHeaders.razor.css similarity index 100% rename from ClientHub/Pages/RunHeaders.razor.css rename to View/Pages/RunHeaders.razor.css diff --git a/ClientHub/Pages/RunInfo.razor b/View/Pages/RunInfo.razor similarity index 77% rename from ClientHub/Pages/RunInfo.razor rename to View/Pages/RunInfo.razor index 6d6d0eb..9b71385 100644 --- a/ClientHub/Pages/RunInfo.razor +++ b/View/Pages/RunInfo.razor @@ -1,9 +1,8 @@ -@page "/RunInfo/{ToolTypeId:int?}/{HeaderId:int?}" +@page "/RunInfo/{ToolTypeId:int?}/{HeaderId:int?}" @using Microsoft.AspNetCore.Components.Web -@using MudBlazor -@namespace OI.Metrology.ClientHub.Pages +@namespace OI.Metrology.View Run Info @@ -25,7 +24,7 @@
  
- Load Headers +
  
diff --git a/ClientHub/Pages/RunInfo.razor.cs b/View/Pages/RunInfo.razor.cs similarity index 64% rename from ClientHub/Pages/RunInfo.razor.cs rename to View/Pages/RunInfo.razor.cs index 7903e17..6d0d817 100644 --- a/ClientHub/Pages/RunInfo.razor.cs +++ b/View/Pages/RunInfo.razor.cs @@ -1,11 +1,14 @@ -using Microsoft.AspNetCore.Components; +using IgniteUI.Blazor.Controls; +using Microsoft.AspNetCore.Components; using Microsoft.JSInterop; -namespace OI.Metrology.ClientHub.Pages; +namespace OI.Metrology.View; public partial class RunInfo { + protected IgbIcon? IconRef { get; set; } + [Parameter] public int? HeaderId { get; set; } [Parameter] public int? ToolTypeId { get; set; } @@ -14,6 +17,12 @@ public partial class RunInfo protected override Task OnAfterRenderAsync(bool firstRender) { + if (firstRender && IconRef is not null) + { + const string buildIcon = ""; + _ = IconRef.EnsureReady().ContinueWith(new Action((e) => + IconRef.RegisterIconFromTextAsync("build", buildIcon, "material"))); + } if (firstRender) { if (JSRuntime is null) diff --git a/ClientHub/Pages/RunInfo.razor.css b/View/Pages/RunInfo.razor.css similarity index 100% rename from ClientHub/Pages/RunInfo.razor.css rename to View/Pages/RunInfo.razor.css diff --git a/ClientHub/Shared/MainLayout.razor b/View/Shared/MainLayout.razor similarity index 81% rename from ClientHub/Shared/MainLayout.razor rename to View/Shared/MainLayout.razor index 308004e..665dbdb 100644 --- a/ClientHub/Shared/MainLayout.razor +++ b/View/Shared/MainLayout.razor @@ -1,14 +1,14 @@ @inherits LayoutComponentBase -@namespace OI.Metrology.ClientHub.Shared +@namespace OI.Metrology.View.Shared @using MudBlazor - + -