Отображение файла в предпросмотре сразу при открытии карточки
Отображение файла в предпросмотре сразу при открытии карточки¶
Требуется в момент открытия карточки (но не после сохранения или обновления) автоматически загружать и отображать файл в области предпросмотра. Напишем расширение 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"))
;
}
}
}