You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kev/Drawer/AI/Converters/MessageTemplateSelector.cs

47 lines
2.0 KiB
C#

1 month ago
using Avalonia.Controls;
using Avalonia.Controls.Templates;
using Avalonia.Markup.Xaml.Templates;
using AI.Models;
namespace AI.Converters
{
public class MessageTemplateSelector : IDataTemplate
{
public required DataTemplate TextMessageTemplate { get; set; }
public required DataTemplate FileMessageTemplate { get; set; }
public required DataTemplate WorkflowStatusTemplate { get; set; }
public required DataTemplate FormMessageTemplate { get; set; }
public required DataTemplate TableMessageTemplate { get; set; }
public required DataTemplate ColumnMatchMessageTemplate { get; set; }
public required DataTemplate ParameterSetMessageTemplate { get; set; }
public required DataTemplate XyzLoadCardTemplate { get; set; }
public required DataTemplate GriddingParamCardTemplate { get; set; }
public Control? Build(object? param)
{
if (param is ChatMessageModel message)
{
return message.Type switch
{
MessageType.File => FileMessageTemplate.Build(param),
MessageType.WorkflowStatus => WorkflowStatusTemplate.Build(param),
MessageType.Form => FormMessageTemplate.Build(param),
MessageType.Table => TableMessageTemplate.Build(param),
MessageType.ColumnMatch => ColumnMatchMessageTemplate.Build(param),
MessageType.ParameterSet => ParameterSetMessageTemplate.Build(param),
MessageType.KnowledgeBase => TextMessageTemplate?.Build(param),
MessageType.XyzLoadCard => XyzLoadCardTemplate.Build(param),
MessageType.GriddingParamCard => GriddingParamCardTemplate.Build(param),
_ => TextMessageTemplate?.Build(param),
};
}
return TextMessageTemplate?.Build(param);
}
public bool Match(object? data)
{
return data is ChatMessageModel;
}
}
}