Added `ReceiverService` to the dependency injection container in `Program.cs` and implemented its functionality for fetching receiver email suggestions via API. Enhanced `DocumentService` with a new method `GetSenderDocumentDetailsByEnvelopeIdAsync` to fetch sender document details by envelope ID. Introduced JSON handling improvements with `JsonSerializerOptions`. These changes improve support for receiver-related operations and extend document-related capabilities.
99 lines
3.9 KiB
C#
99 lines
3.9 KiB
C#
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
|
|
using EnvelopeGenerator.Server.Client.Services;
|
|
using EnvelopeGenerator.Server.Client.Options;
|
|
using DevExpress.Blazor.Reporting;
|
|
using DevExpress.XtraReports.Web.Extensions;
|
|
using DevExpress.DataAccess.Web;
|
|
using DevExpress.XtraReports.Services;
|
|
using System.Globalization;
|
|
|
|
var builder = WebAssemblyHostBuilder.CreateDefault(args);
|
|
|
|
var initialCulture = await ResolveInitialCultureAsync(builder.HostEnvironment.BaseAddress);
|
|
var cultureInfo = new CultureInfo(initialCulture);
|
|
CultureInfo.DefaultThreadCurrentCulture = cultureInfo;
|
|
CultureInfo.DefaultThreadCurrentUICulture = cultureInfo;
|
|
|
|
builder.Services.AddLocalization();
|
|
|
|
// Named HttpClient for API calls (both for services and DevExpress components)
|
|
builder.Services.AddHttpClient("EnvelopeGenerator.Server", client =>
|
|
{
|
|
client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress);
|
|
});
|
|
|
|
// Default HttpClient (DevExpress PdfViewer requires this)
|
|
builder.Services.AddScoped(sp => new HttpClient
|
|
{
|
|
BaseAddress = new Uri(builder.HostEnvironment.BaseAddress)
|
|
});
|
|
|
|
// Configuration Options
|
|
builder.Services.Configure<PdfViewerOptions>(opts =>
|
|
builder.Configuration.GetSection(PdfViewerOptions.SectionName).Bind(opts));
|
|
|
|
// Business Services
|
|
builder.Services.AddScoped<DocumentService>();
|
|
builder.Services.AddScoped<AuthService>();
|
|
builder.Services.AddScoped<AnnotationService>();
|
|
builder.Services.AddScoped<EnvelopeReceiverService>();
|
|
builder.Services.AddScoped<SignatureService>();
|
|
builder.Services.AddScoped<SignatureCacheService>();
|
|
builder.Services.AddSingleton<AppVersionService>();
|
|
builder.Services.AddScoped<EnvelopeService>();
|
|
builder.Services.AddScoped<LocalizationService>();
|
|
builder.Services.AddScoped<ReceiverService>();
|
|
|
|
// UI Preferences & Theme
|
|
builder.Services.AddScoped<UserPreferencesService>();
|
|
builder.Services.AddScoped<ThemeService>();
|
|
|
|
// Logo configuration (loaded once after login, in-memory cached)
|
|
builder.Services.AddScoped<CustomImagesService>();
|
|
|
|
// DevExpress WASM
|
|
builder.Services.AddDevExpressWebAssemblyBlazorPdfViewer();
|
|
builder.Services.AddDevExpressWebAssemblyBlazorReportViewer();
|
|
|
|
builder.Services.AddDevExpressBlazorReportingWebAssembly(configure => {
|
|
configure.UseDevelopmentMode();
|
|
});
|
|
|
|
// Reporting Services
|
|
builder.Services.AddScoped<IDataSourceWizardJsonConnectionStorage, CustomDataSourceWizardJsonDataConnectionStorage>();
|
|
builder.Services.AddScoped<IJsonDataConnectionProviderFactory, CustomJsonDataConnectionProviderFactory>();
|
|
builder.Services.AddScoped<IObjectDataSourceWizardTypeProvider, ObjectDataSourceWizardCustomTypeProvider>();
|
|
|
|
DevExpress.Utils.DeserializationSettings.RegisterTrustedClass(typeof(EnvelopeGenerator.Server.Client.Data.DataItemList));
|
|
DevExpress.Utils.DeserializationSettings.RegisterTrustedClass(typeof(EnvelopeGenerator.Server.Client.PredefinedReports.Report));
|
|
|
|
builder.Services.AddSingleton<InMemoryReportStorageWebExtension>();
|
|
builder.Services.AddSingleton<ReportStorageWebExtension>(sp => sp.GetRequiredService<InMemoryReportStorageWebExtension>());
|
|
builder.Services.AddScoped<IReportProviderAsync, CustomReportProvider>();
|
|
|
|
ReportStorageWebExtension.RegisterExtensionGlobal(new InMemoryReportStorageWebExtension());
|
|
|
|
var host = builder.Build();
|
|
await FontLoader.LoadFonts(host.Services.GetRequiredService<IHttpClientFactory>(), new List<string> { "opensans.ttf" });
|
|
await host.RunAsync();
|
|
|
|
static async Task<string> ResolveInitialCultureAsync(string baseAddress)
|
|
{
|
|
try
|
|
{
|
|
using var http = new HttpClient { BaseAddress = new Uri(baseAddress) };
|
|
var response = await http.GetAsync("/api/Localization/lang");
|
|
|
|
if (!response.IsSuccessStatusCode)
|
|
return "de-DE";
|
|
|
|
var value = await response.Content.ReadAsStringAsync();
|
|
var culture = value.Trim().Trim('"');
|
|
return string.IsNullOrWhiteSpace(culture) ? "de-DE" : culture;
|
|
}
|
|
catch
|
|
{
|
|
return "de-DE";
|
|
}
|
|
}
|