Introduced a new step (step 2) in the `CreateEnvelopeWizardPopup` for configuring envelope settings, including security, reminders, and expiration options. - Added fields for certification type, final email options, 2FA, access codes, and reminder settings. - Updated step titles, descriptions, and total steps from 4 to 5. - Implemented validation logic for the new settings step. - Added methods to handle changes in settings fields and apply defaults. - Updated `CreateEnvelopeWizardResult` and `CreateEnvelopeBootstrapPayload` to include new fields. - Modified `SenderEditorPage` and `SenderPage` to handle new settings. - Styled the new step with updated CSS for grids, groups, and toggles. - Refactored state reset logic to initialize new fields.
65 lines
2.0 KiB
C#
65 lines
2.0 KiB
C#
using System.Text.Json;
|
|
using Microsoft.JSInterop;
|
|
|
|
namespace EnvelopeGenerator.Server.Client.Services;
|
|
|
|
public sealed class CreateEnvelopeBootstrapStorageService(IJSRuntime jsRuntime)
|
|
{
|
|
private const string StorageKeyPrefix = "sender.createEnvelope.bootstrap.";
|
|
private static readonly JsonSerializerOptions JsonOptions = new(JsonSerializerDefaults.Web);
|
|
|
|
public async Task<string> StoreAsync(CreateEnvelopeBootstrapPayload payload)
|
|
{
|
|
var token = Guid.NewGuid().ToString("N");
|
|
var key = BuildStorageKey(token);
|
|
var json = JsonSerializer.Serialize(payload, JsonOptions);
|
|
await jsRuntime.InvokeVoidAsync("sessionStorage.setItem", key, json);
|
|
return token;
|
|
}
|
|
|
|
public async Task<CreateEnvelopeBootstrapPayload?> ConsumeAsync(string? token)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(token))
|
|
return null;
|
|
|
|
var key = BuildStorageKey(token);
|
|
var raw = await jsRuntime.InvokeAsync<string?>("sessionStorage.getItem", key);
|
|
await jsRuntime.InvokeVoidAsync("sessionStorage.removeItem", key);
|
|
|
|
if (string.IsNullOrWhiteSpace(raw))
|
|
return null;
|
|
|
|
try
|
|
{
|
|
return JsonSerializer.Deserialize<CreateEnvelopeBootstrapPayload>(raw, JsonOptions);
|
|
}
|
|
catch
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
|
|
private static string BuildStorageKey(string token) => $"{StorageKeyPrefix}{token}";
|
|
}
|
|
|
|
public sealed record CreateEnvelopeBootstrapPayload(
|
|
string Title,
|
|
string Message,
|
|
int? EnvelopeTypeId,
|
|
string Language,
|
|
bool UseAccessCode,
|
|
bool TFAEnabled,
|
|
int CertificationType,
|
|
int FinalEmailToCreator,
|
|
int FinalEmailToReceivers,
|
|
bool SendReminderEmails,
|
|
int FirstReminderDays,
|
|
int ReminderIntervalDays,
|
|
int ExpiresWhenDays,
|
|
int ExpiresWarningWhenDays,
|
|
IReadOnlyList<CreateEnvelopeBootstrapReceiver> Receivers,
|
|
byte[]? DocumentBytes,
|
|
string? DocumentFileName);
|
|
|
|
public sealed record CreateEnvelopeBootstrapReceiver(string FullName, string EmailAddress);
|