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