Skip to content

Commit a4220f4

Browse files
authored
Added Send messages from uploaded files (#52)
1 parent 01897b0 commit a4220f4

File tree

13 files changed

+178
-10
lines changed

13 files changed

+178
-10
lines changed

src/Api/Host/Host.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
<PropertyGroup Condition=" '$(RunConfiguration)' == 'CrossBusExplorer' " />
1313
<ItemGroup>
14-
<PackageReference Include="HotChocolate.AspNetCore" Version="13.8.1" />
14+
<PackageReference Include="HotChocolate.AspNetCore" Version="13.9.0" />
1515
</ItemGroup>
1616

1717
<ItemGroup>

src/Core/Management/Management.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
</PropertyGroup>
1010

1111
<ItemGroup>
12-
<PackageReference Include="Azure.Messaging.ServiceBus" Version="7.17.2" />
12+
<PackageReference Include="Azure.Messaging.ServiceBus" Version="7.17.4" />
1313
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.0" />
1414
</ItemGroup>
1515

src/Core/ServiceBus.Contracts/Types/SendMessage.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,8 @@ public record SendMessage(
1212
string? SessionId,
1313
DateTimeOffset? ScheduledEnqueueTime,
1414
TimeSpan? TimeToLive,
15-
Dictionary<string, object?>? ApplicationProperties);
15+
Dictionary<string, object?>? ApplicationProperties)
16+
{
17+
public static SendMessage CreateFromBody(string body) =>
18+
new SendMessage(body, null, null, null, null, null, null, null, null, null, null, null);
19+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace CrossBusExplorer.ServiceBus.Contracts.Types;
2+
3+
public enum UploadFileType
4+
{
5+
Body = 0,
6+
BodyWithApplicationProperties = 1
7+
}

src/Core/ServiceBus/ServiceBus.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
</ItemGroup>
1616

1717
<ItemGroup>
18-
<PackageReference Include="Azure.Messaging.ServiceBus" Version="7.17.2" />
18+
<PackageReference Include="Azure.Messaging.ServiceBus" Version="7.17.4" />
1919
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />
2020
</ItemGroup>
2121

src/Ui/Website.Host/Website.Host.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
<ImplicitUsings>enable</ImplicitUsings>
66
</PropertyGroup>
77
<ItemGroup>
8-
<PackageReference Include="ElectronSharp.API" Version="28.2.0.44969" />
9-
<PackageReference Include="MudBlazor" Version="6.15.0" />
8+
<PackageReference Include="ElectronSharp.API" Version="29.0.1.46142" />
9+
<PackageReference Include="MudBlazor" Version="6.17.0" />
1010
</ItemGroup>
1111

1212
<ItemGroup>

src/Ui/Website.Host/electron.manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"appId": "com.crossbusexplorer.app",
1414
"productName": "Cross Bus Explorer",
1515
"copyright": "Copyright © 2024",
16-
"buildVersion": "0.4.6",
16+
"buildVersion": "0.4.7",
1717
"compression": "maximum",
1818
"directories": {
1919
"output": "../../../bin/Desktop"
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
using System.Collections.Generic;
2+
using CrossBusExplorer.ServiceBus.Contracts.Types;
3+
namespace CrossBusExplorer.Website.Models;
4+
5+
public record MessagesUploadDialogResult(UploadFileType Type, IList<string> FilesContent);

src/Ui/Website/Pages/Messages.razor

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@
1616
<MudTooltip Text="Send message">
1717
<MudIconButton Icon="@Icons.Filled.Send" OnClick="@(() => Model.ViewMessageDetails(null, true))" ButtonType="ButtonType.Button">Send message</MudIconButton>
1818
</MudTooltip>
19+
20+
<MudTooltip Text="Import messages from file">
21+
<MudIconButton Icon="@Icons.Filled.FileUpload" OnClick="@(() => Model.ImportMessagesFromFileAsync(default))" ButtonType="ButtonType.Button">Import messages from file</MudIconButton>
22+
</MudTooltip>
1923
</div>
2024

2125
<MudTable Items="Model.Messages" Hover="true" SortLabel="Sort By" Elevation="0">
@@ -81,7 +85,7 @@
8185
</MudTable>
8286
</MudPaper>
8387

84-
<MudDialog @bind-IsVisible="Model.DialogVisible">
88+
<MudDialog @bind-IsVisible="Model.DialogVisible" Options="_dialogOptions" DefaultFocus="DefaultFocus.Element">
8589
<TitleContent>
8690
<MudText Typo="Typo.h6">
8791
Receive @QueueOrTopicName @SubscriptionName messages
@@ -132,7 +136,7 @@
132136
For="@(() => _formModel.Type)">
133137

134138
@* TODO: fix all receive option
135-
<MudRadio Dense="true" *@
139+
<MudRadio Dense="true" *@
136140
@* Size="Size.Small" *@
137141
@* Option="ReceiveType.All"> *@
138142
@* @ReceiveType.All *@
@@ -194,6 +198,10 @@
194198
MudForm form;
195199
ReceiveMessagesForm _formModel;
196200
ReceiveMessageFormValidator _validator = new ReceiveMessageFormValidator();
201+
DialogOptions _dialogOptions = new DialogOptions
202+
{
203+
CloseOnEscapeKey = true,
204+
};
197205

198206
protected override async Task OnInitializedAsync()
199207
{
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
@using CrossBusExplorer.ServiceBus.Contracts.Types
2+
@using System.IO
3+
@using CrossBusExplorer.Website.Models
4+
<MudDialog>
5+
<TitleContent>
6+
<MudText Typo="Typo.h6">
7+
Upload messages from file
8+
</MudText>
9+
<MudText>Max 1000 at once</MudText>
10+
</TitleContent>
11+
<DialogContent>
12+
<MudPaper Elevation="3">
13+
<MudField Variant="Variant.Outlined" Label="File type">
14+
<MudRadioGroup @bind-SelectedOption="_uploadFileType"
15+
For="@(() => _uploadFileType)">
16+
<MudRadio Dense="true"
17+
Size="Size.Small"
18+
Option="UploadFileType.Body">
19+
Body only
20+
</MudRadio>
21+
<MudRadio Dense="true"
22+
Size="Size.Small"
23+
Disabled="true"
24+
Option="UploadFileType.BodyWithApplicationProperties">
25+
Body with ApplicationProperties (not yet supported)
26+
</MudRadio>
27+
</MudRadioGroup>
28+
</MudField>
29+
</MudPaper>
30+
<MudPaper Elevation="3">
31+
<MudField Variant="Variant.Outlined" Label="Select files">
32+
<MudFileUpload T="IReadOnlyList<IBrowserFile>" FilesChanged="UploadFilesAsync" MaximumFileCount="1000">
33+
<ButtonTemplate>
34+
<MudButton HtmlTag="label"
35+
Variant="Variant.Filled"
36+
Color="Color.Primary"
37+
StartIcon="@Icons.Material.Filled.CloudUpload"
38+
for="@context.Id">
39+
Select multiple files
40+
</MudButton>
41+
</ButtonTemplate>
42+
</MudFileUpload>
43+
</MudField>
44+
</MudPaper>
45+
</DialogContent>
46+
<DialogActions>
47+
<MudButton ButtonType="ButtonType.Reset"
48+
Color="Color.Default"
49+
OnClick="@(CloseDialog)"
50+
Class="px-10">
51+
Close
52+
</MudButton>
53+
<MudButton ButtonType="ButtonType.Button"
54+
Color="Color.Success"
55+
OnClick="@(Submit)"
56+
Disabled="@(!_fileContents.Any())"
57+
Class="px-10">
58+
Upload @_fileContents.Count files
59+
</MudButton>
60+
</DialogActions>
61+
</MudDialog>
62+
63+
@code {
64+
[CascadingParameter]
65+
MudDialogInstance MudDialog { get; set; }
66+
67+
IList<string> _fileContents = new List<string>();
68+
69+
private UploadFileType _uploadFileType;
70+
71+
private void CloseDialog()
72+
{
73+
MudDialog.Close(DialogResult.Cancel());
74+
}
75+
76+
private void Submit()
77+
{
78+
MudDialog.Close(DialogResult.Ok(new MessagesUploadDialogResult(_uploadFileType, _fileContents)));
79+
}
80+
81+
private async Task UploadFilesAsync(IReadOnlyList<IBrowserFile> files)
82+
{
83+
_fileContents.Clear();
84+
85+
foreach (IBrowserFile file in files)
86+
{
87+
using var reader = new StreamReader(file.OpenReadStream());
88+
var fileContent = await reader.ReadToEndAsync(default);
89+
90+
_fileContents.Add(fileContent);
91+
}
92+
}
93+
}

0 commit comments

Comments
 (0)