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

Добавление кликабельной иконки-тега и дополнительного контента для заданий в карточке

Добавление кликабельной иконки-тега и дополнительного контента для заданий в карточке

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

Также можно добавить ссылку, при нажатии которой выполнится некоторое действие, причём ссылка может быть видна даже для не взятого в работу задания (для которого не отображается форма задания). Вместо ссылки можно указать любой контент.

Note

Расширения на теги и дополнительный контент в заданиях карточки доступны, начиная со сборки 2.5.

Например, напишем расширение ICardUIExtension, в котором для каждого задания “Постановка задачи” устанавливается тег методом Workspace.SetTag(...) с указанием всплывающей подсказки и действия при нажатии по иконке. Для основной формы заданий, а также при отображении не взятого в работу задания без формы, укажем ссылку методом Workspace.SetLink(...). Вместо ссылки можно было бы задать произвольный контент в свойстве Workspace.AdditionalContent.

Зарегистрируем расширение так, чтобы оно выполнялось только для карточки типа “Договор”.

using System.Threading.Tasks; using Tessa.Cards; using Tessa.Extensions.Default.Shared; using Tessa.UI; using Tessa.UI.Cards; using Tessa.UI.Cards.Tasks;

namespace Tessa.Extensions.Client { public sealed class ExampleTaskTagUIExtension : CardUIExtension { public override async Task Initialized(ICardUIExtensionContext context) { await context.Model.ModifyTasksAsync( async (task, model) => { if (task.TaskModel.CardType.ID == DefaultTaskTypes.WfResolutionProjectTypeID) { await task.ModifyWorkspaceAsync( (t, firstTime) => { // иконку-тег отображаем для любых состояний задания t.Workspace.SetTag( "Thin43", "Текст всплывающей подсказки, может быть строкой локализации", new DelegateCommand(p => TessaDialog.ShowMessage( UIContext.Current.CardEditor.CardModel.Digest)));

// ссылку отображаем для заданий, не взятых в работу, или для формы по умолчанию if (t.Workspace.State == TaskWorkspaceState.Initial || t.Workspace.State == TaskWorkspaceState.DefaultForm) { t.Workspace.SetLink( "<< показать файлы", "Текст всплывающей подсказки для ссылки", new DelegateCommand(p => TessaDialog.ShowMessage( UIContext.Current.CardEditor.CardModel.Digest))); }

return ValueTask.CompletedTask; }); } }); } }

[Registrator] public sealed class ExampleTaskTagRegistrator : RegistratorBase { public override void InitializeExtensions(IExtensionContainer extensionContainer) { extensionContainer .RegisterExtension<ICardUIExtension, ExampleTaskTagUIExtension>(x => x .WithOrder(ExtensionStage.AfterPlatform, 1) .WithSingleton() .WhenCardTypes(DefaultCardTypes.ContractTypeID)) ; } } }

Back to top