using BotPages.Core; using BotPages.Core.Messaging; using System.Xml; namespace Demo.Pages; /// /// Страница ввода деталей заявки. /// Страница с параметрами и получением состояния. /// public sealed class DetailsPage : StatefullPage { [Statefull("Request")] private Models.Request Request; public override Task OnEnter(PageContext ctx, DetailsArgs args, CancellationToken ct) { Request = new() { Title = args.Title, }; return new MessageBuilder(ctx) .Text($"Заголовок: {args.Title}\nДобавьте детали или нажмите Далее.") .Inline(new InlineButton("Далее", "next"), new InlineButton("Назад", "back")) .Reply("Отмена") .SendAsync(ct); } public override async Task OnButton(PageContext ctx, string payload, CancellationToken ct) { switch (payload) { case "next": { await SaveState(ctx, ct); await ctx.Navigation.GoToAsync(ctx, ct); break; } case "back": { await ctx.Navigation.GoToAsync(ctx, ct); break; } }; } public override async Task OnText(PageContext ctx, string text, CancellationToken ct) { Request.Details = text; await SaveState(ctx, ct); await ctx.Navigation.GoToAsync(ctx, ct); } } /// /// Аргументы для страницы DetailsPage. /// public sealed class DetailsArgs { public string Title { get; set; } = ""; }