Перейти к содержанию

Отображение файла в предпросмотре сразу при открытии карточки

Отображение файла в предпросмотре сразу при открытии карточки

Требуется в момент открытия карточки (но не после сохранения или обновления) автоматически загружать и отображать файл в области предпросмотра. Напишем расширение CardUIExtension, которое в методе Initialized проверяет тип открытия карточки context.InitializationType, который должен соответствовать типу “открывается карточка в новой вкладке” - CardUIInitializationType.Opening.

Далее находим файл, который требуется показать сразу после открытия, и элемент управления, в котором этот файл есть. Если файл найден, то в методе ShowInPreviewAsync выполняем загрузку его содержимого, после чего отображаем файл в предпросмотре и выделяем его в элементе управления.

using System.Linq; using System.Threading; using System.Threading.Tasks; using Tessa.Cards; using Tessa.Files; using Tessa.Platform.Validation; using Tessa.UI; using Tessa.UI.Cards; using Tessa.UI.Cards.Controls; using Tessa.UI.Files;

namespace Tessa.Extensions.Client { public sealed class TestUIExtension : CardUIExtension { public override async Task Initialized(ICardUIExtensionContext context) { if (context.InitializationType != CardUIInitializationType.Opening) { return; }

IFile file = context.FileContainer.Files.OrderBy(x => x.Name).FirstOrDefault(); if (file == null) { return; }

foreach (FileListViewModel controlViewModel in context.Model.ControlBag.OfType<FileListViewModel>()) { IFileControl control = controlViewModel.FileControl; IFileViewModel fileViewModel = control.Items.FirstOrDefault(x => x.Model == file);

if (fileViewModel != null) { await ShowInPreviewAsync(fileViewModel, control, context.CancellationToken); break; } } }

private static async Task ShowInPreviewAsync(IFileViewModel fileViewModel, IFileControl control, CancellationToken cancellationToken = default) { ValidationResult loadResult = await fileViewModel.Model.EnsureContentDownloadedInUIAsync(cancellationToken: cancellationToken); TessaDialog.ShowNotEmpty(loadResult);

if (loadResult.IsSuccessful) { string filePath = fileViewModel.Model.Content.GetLocalFilePath(); await control.Manager.ShowPreviewAsync(control, filePath, cancellationToken: cancellationToken);

fileViewModel.IsSelected = true; } } }

[Registrator] public sealed class TestRegistrator : RegistratorBase { public override void RegisterExtensions(IExtensionContainer extensionContainer) { extensionContainer .RegisterExtension<ICardUIExtension, TestUIExtension>(x => x .WithOrder(ExtensionStage.AfterPlatform, 1) .WithSingleton() .WhenCardTypes("Car")) ; } } }

Back to top