Skip to content

Commit 6d802ef

Browse files
committed
init
1 parent 76aa54a commit 6d802ef

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+2458
-0
lines changed

RoL.Blazor.sln

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
2+
Microsoft Visual Studio Solution File, Format Version 12.00
3+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RoL.Blazor", "RoL.Blazor\RoL.Blazor.csproj", "{9AA0DCDF-0B05-481D-88F7-E088A3990DFA}"
4+
EndProject
5+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RoL.Dtos", "RoL.Dtos\RoL.Dtos.csproj", "{62FBB61A-83AB-4517-ACC2-755225A07CA0}"
6+
EndProject
7+
Global
8+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
9+
Debug|Any CPU = Debug|Any CPU
10+
Release|Any CPU = Release|Any CPU
11+
EndGlobalSection
12+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
13+
{9AA0DCDF-0B05-481D-88F7-E088A3990DFA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
14+
{9AA0DCDF-0B05-481D-88F7-E088A3990DFA}.Debug|Any CPU.Build.0 = Debug|Any CPU
15+
{9AA0DCDF-0B05-481D-88F7-E088A3990DFA}.Release|Any CPU.ActiveCfg = Release|Any CPU
16+
{9AA0DCDF-0B05-481D-88F7-E088A3990DFA}.Release|Any CPU.Build.0 = Release|Any CPU
17+
{62FBB61A-83AB-4517-ACC2-755225A07CA0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
18+
{62FBB61A-83AB-4517-ACC2-755225A07CA0}.Debug|Any CPU.Build.0 = Debug|Any CPU
19+
{62FBB61A-83AB-4517-ACC2-755225A07CA0}.Release|Any CPU.ActiveCfg = Release|Any CPU
20+
{62FBB61A-83AB-4517-ACC2-755225A07CA0}.Release|Any CPU.Build.0 = Release|Any CPU
21+
EndGlobalSection
22+
EndGlobal

RoL.Blazor/App.razor

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<Router AppAssembly="@typeof(App).Assembly">
2+
<Found Context="routeData">
3+
<RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)"/>
4+
<FocusOnNavigate RouteData="@routeData" Selector="h1"/>
5+
</Found>
6+
<NotFound>
7+
<PageTitle>Not found</PageTitle>
8+
<LayoutView Layout="@typeof(MainLayout)">
9+
<p role="alert">Sorry, there's nothing at this address.</p>
10+
</LayoutView>
11+
</NotFound>
12+
</Router>

RoL.Blazor/Pages/Counter.razor

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
@page "/counter"
2+
3+
<PageTitle>Counter</PageTitle>
4+
5+
<h1>Counter</h1>
6+
7+
<p role="status">Current count: @currentCount</p>
8+
9+
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
10+
11+
@code {
12+
private int currentCount = 0;
13+
14+
private void IncrementCount()
15+
{
16+
currentCount++;
17+
}
18+
19+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<MudDialog>
2+
<DialogContent>
3+
<MudText>Are you sure you want to delete this @(EntityName)?</MudText>
4+
</DialogContent>
5+
<DialogActions>
6+
<MudButton OnClick="Cancel">Cancel</MudButton>
7+
<MudButton Color="Color.Error" Variant="Variant.Filled" OnClick="Submit">Delete</MudButton>
8+
</DialogActions>
9+
</MudDialog>
10+
@code {
11+
[CascadingParameter] MudDialogInstance MudDialog { get; set; }
12+
13+
[Parameter] public string EntityName { get; set; }
14+
15+
void Submit() => MudDialog.Close(DialogResult.Ok(true));
16+
void Cancel() => MudDialog.Cancel();
17+
}

RoL.Blazor/Pages/Index.razor

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
@page "/"
2+
3+
<PageTitle>Index</PageTitle>
4+
5+
<h1>Hello, world!</h1>
6+
7+
Welcome to your new app.
8+
9+
<SurveyPrompt Title="How is Blazor working for you?"/>
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
@page "/BridgeCreate"
2+
@using RoL.Dtos
3+
@inject HttpClient Http
4+
5+
<MudDialog DisableSidePadding="true">
6+
<DialogContent>
7+
<MudContainer xs="12" Class="mx-auto px-4 justify-center my-4 mud-text-align-center" Style="max-height: 700px; width: 600px; overflow-y: scroll">
8+
<MudItem xs="12">
9+
<MudTextField Class="my-2" @bind-Value="@_newBridge.Name" Label="Bridge name" Variant="Variant.Outlined" Margin="Margin.Dense"></MudTextField>
10+
</MudItem>
11+
<MudDivider Class="mt-2 mb-1"></MudDivider>
12+
<b>Address</b>
13+
@foreach(var address in addresses)
14+
{
15+
<MudItem xs="12" Class="d-flex flex-row">
16+
<MudTextField Class="mr-1" @bind-Value="@address.Item" Label="Address" Variant="Variant.Outlined" Margin="Margin.Dense"></MudTextField>
17+
<MudIconButton Icon="@Icons.Material.Filled.Delete" Color="Color.Error" Size="Size.Small" Class="ma-n1" OnClick="@(() => DeleteAddress(address))" />
18+
</MudItem>
19+
}
20+
<MudIconButton Class="d-flex flex-row my-n1" Icon="@Icons.Material.Rounded.Add" OnClick="@AddAddress" Color="Color.Success" aria-label="add"></MudIconButton>
21+
<MudDivider Class="mt-2 mb-1"></MudDivider>
22+
<b>Slaves</b>
23+
@foreach(var slave in slaves)
24+
{
25+
<MudItem xs="12" Class="d-flex flex-row">
26+
27+
<MudSelect Class="ml-1" @bind-Value="@slave.Item" Label="Vlans" Variant="Variant.Outlined" Margin="Margin.Dense">
28+
@foreach (var vlan in _vlans)
29+
{
30+
<MudSelectItem T="string" Value="@vlan.Name">@vlan.Name</MudSelectItem>
31+
}
32+
</MudSelect>
33+
<MudIconButton Icon="@Icons.Material.Filled.Delete" Color="Color.Error" Size="Size.Small" Class="ma-n1" OnClick="@(() => DeleteSlave(slave))"/>
34+
</MudItem>
35+
}
36+
<MudIconButton Class="d-flex flex-row my-n1" Icon="@Icons.Material.Rounded.Add" OnClick="@AddSlaves" Color="Color.Success" aria-label="add"></MudIconButton>
37+
</MudContainer>
38+
</DialogContent>
39+
<DialogActions>
40+
<MudButton OnClick="Cancel">Cancel</MudButton>
41+
<MudButton Color="Color.Primary" OnClick="Create">Ok</MudButton>
42+
</DialogActions>
43+
</MudDialog>
44+
<SnackBars @ref="_snackBars"></SnackBars>
45+
@code {
46+
47+
[CascadingParameter]
48+
MudDialogInstance MudDialog { get; set; }
49+
50+
private SnackBars _snackBars;
51+
private HostNetworkBridgeCreateDto _newBridge = new();
52+
private List<StringItem> addresses = new();
53+
private List<StringItem> slaves = new();
54+
private List<HostNetworkVlanDto>? _vlans = new();
55+
56+
public class StringItem
57+
{
58+
public string Item { get; set; }
59+
}
60+
61+
void Cancel() => MudDialog.Cancel();
62+
63+
private async void Create()
64+
{
65+
_newBridge.Addresses = new List<string>();
66+
_newBridge.Slaves = new List<string>();
67+
_newBridge.Slaves.AddRange(slaves.Select(s => s.Item));
68+
_newBridge.Addresses.AddRange(addresses.Select(a => a.Item));
69+
var response = await Http.PostAsJsonAsync("host/network/bridge/", _newBridge);
70+
if (response.IsSuccessStatusCode)
71+
{
72+
await _snackBars.ShowSuccess();
73+
await Task.Run(() => MudDialog.Close(DialogResult.Ok(true)));
74+
}
75+
else
76+
{
77+
await _snackBars.ShowError(response.RequestMessage!.ToString());
78+
}
79+
80+
}
81+
private void AddAddress()
82+
{
83+
addresses.Add(new StringItem(){Item = string.Empty});
84+
}
85+
private void DeleteAddress(StringItem address)
86+
{
87+
addresses.Remove(address);
88+
}
89+
private void AddSlaves()
90+
{
91+
slaves.Add(new StringItem(){Item = string.Empty});
92+
}
93+
private void DeleteSlave(StringItem slave)
94+
{
95+
slaves.Remove(slave);
96+
}
97+
protected override async Task OnInitializedAsync()
98+
{
99+
_vlans = await Http.GetFromJsonAsync<List<HostNetworkVlanDto>>("host/network/vlan/");
100+
}
101+
}
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
@page "/BridgeUpdate"
2+
@using RoL.Dtos
3+
@inject HttpClient Http
4+
5+
<MudDialog DisableSidePadding="true">
6+
<DialogContent>
7+
<MudContainer xs="12" Class="mx-auto pa-4 justify-center my-4 mud-text-align-center" Style="max-height: 700px; width: 400px; overflow-y: scroll">
8+
<b>Address</b>
9+
@foreach (var address in addressesItems)
10+
{
11+
<MudItem xs="12" Class="d-flex flex-row">
12+
<MudTextField Class="mr-1" @bind-Value="@address.Item" Label="Address" Variant="Variant.Outlined" Margin="Margin.Dense"></MudTextField>
13+
<MudIconButton Icon="@Icons.Material.Filled.Delete" Color="Color.Error" Size="Size.Small" Class="ma-n1" OnClick="@(() => DeleteAddress(address))"/>
14+
</MudItem>
15+
}
16+
<MudIconButton Class="d-flex flex-row my-n1" Icon="@Icons.Material.Rounded.Add" OnClick="@AddAddress" Color="Color.Success" aria-label="add"></MudIconButton>
17+
<b>Slaves</b>
18+
@foreach(var slave in slavesItems)
19+
{
20+
<MudItem xs="12" Class="d-flex flex-row">
21+
22+
<MudSelect Class="ml-1" @bind-Value="@slave.Item" Label="Vlans" Variant="Variant.Outlined" Margin="Margin.Dense">
23+
@foreach (var vlan in _vlans)
24+
{
25+
<MudSelectItem T="string" Value="@vlan.Name">@vlan.Name</MudSelectItem>
26+
}
27+
</MudSelect>
28+
<MudIconButton Icon="@Icons.Material.Filled.Delete" Color="Color.Error" Size="Size.Small" Class="ma-n1" OnClick="@(() => DeleteSlave(slave))"/>
29+
</MudItem>
30+
}
31+
<MudIconButton Class="d-flex flex-row my-n1" Icon="@Icons.Material.Rounded.Add" OnClick="@AddSlaves" Color="Color.Success" aria-label="add"></MudIconButton>
32+
<MudDivider Class="mt-2 mb-1"/>
33+
</MudContainer>
34+
</DialogContent>
35+
<DialogActions>
36+
<MudButton OnClick="Cancel">Cancel</MudButton>
37+
<MudButton Color="Color.Primary" OnClick="Update">Ok</MudButton>
38+
</DialogActions>
39+
</MudDialog>
40+
<SnackBars @ref="_snackBars"></SnackBars>
41+
@code {
42+
43+
[CascadingParameter] MudDialogInstance MudDialog { get; set; }
44+
45+
[Parameter] public HostNetworkBridgeDto Bridge { get; set; } = new();
46+
47+
private SnackBars _snackBars;
48+
private HostNetworkBridgeUpdateDto _bridgePutRequest = new();
49+
private List<StringItem> addressesItems = new();
50+
private List<StringItem> slavesItems = new();
51+
private List<HostNetworkVlanDto>? _vlans = new();
52+
53+
void Cancel() => MudDialog.Cancel();
54+
55+
public class StringItem
56+
{
57+
public string Item { get; set; }
58+
}
59+
60+
protected override async Task OnInitializedAsync()
61+
{
62+
_vlans = await Http.GetFromJsonAsync<List<HostNetworkVlanDto>>("host/network/vlan/");
63+
_bridgePutRequest = new HostNetworkBridgeUpdateDto
64+
{
65+
Addresses = Bridge.Addresses,
66+
Slaves = Bridge.Slaves
67+
};
68+
69+
foreach (var address in _bridgePutRequest.Addresses)
70+
addressesItems.Add(new StringItem{Item = address});
71+
72+
foreach (var slave in _bridgePutRequest.Slaves)
73+
slavesItems.Add(new StringItem{Item = slave});
74+
}
75+
private void AddAddress()
76+
{
77+
addressesItems.Add(new StringItem(){Item = string.Empty});
78+
}
79+
private void DeleteAddress(StringItem address)
80+
{
81+
addressesItems.Remove(address);
82+
}
83+
private void AddSlaves()
84+
{
85+
slavesItems.Add(new StringItem(){Item = string.Empty});
86+
}
87+
private void DeleteSlave(StringItem slave)
88+
{
89+
slavesItems.Remove(slave);
90+
}
91+
92+
private async void Update()
93+
{
94+
_bridgePutRequest.Addresses = new List<string>();
95+
_bridgePutRequest.Slaves = new List<string>();
96+
_bridgePutRequest.Slaves.AddRange(slavesItems.Select(s => s.Item));
97+
_bridgePutRequest.Addresses.AddRange(addressesItems.Select(a => a.Item));
98+
var response = await Http.PutAsJsonAsync<HostNetworkBridgeUpdateDto>("host/network/bridge/" + Bridge.Name, _bridgePutRequest);
99+
if (response.IsSuccessStatusCode)
100+
{
101+
await Task.Run(() => MudDialog.Close(DialogResult.Ok(true)));
102+
await _snackBars.ShowSuccess();
103+
}
104+
else
105+
{
106+
await _snackBars.ShowError(response.RequestMessage!.ToString());
107+
}
108+
}
109+
110+
}

0 commit comments

Comments
 (0)