disable icon buttons for unsupported plugin actions

This commit is contained in:
nilsk 2026-07-21 20:52:47 +02:00
parent acebf774d0
commit 8b7b6ebd2c
No known key found for this signature in database
GPG Key ID: A5C0151B4DDB172C
2 changed files with 8 additions and 11 deletions

View File

@ -97,7 +97,7 @@
{ {
var isDefaultSupportContact = string.Equals(sourceUrl, AssistantPluginGenerationService.DEFAULT_SUPPORT_CONTACT, StringComparison.Ordinal); var isDefaultSupportContact = string.Equals(sourceUrl, AssistantPluginGenerationService.DEFAULT_SUPPORT_CONTACT, StringComparison.Ordinal);
<MudTooltip Text="@(isDefaultSupportContact ? string.Empty : T("Send a mail"))"> <MudTooltip Text="@(isDefaultSupportContact ? string.Empty : T("Send a mail"))">
<MudIconButton Icon="@Icons.Material.Filled.Email" Href="@sourceUrl" Target="_blank" Size="Size.Medium" Disabled="@isDefaultSupportContact"/> <MudIconButton Icon="@Icons.Material.Filled.Email" Href="@sourceUrl" Target="_blank" Size="Size.Medium" Disabled="@isDefaultSupportContact"/>
</MudTooltip> </MudTooltip>
} }
else else
@ -112,21 +112,21 @@
@if (context is IAvailablePlugin editablePlugin && CanEditAssistantPlugin(editablePlugin)) @if (context is IAvailablePlugin editablePlugin && CanEditAssistantPlugin(editablePlugin))
{ {
<MudTooltip Text="@T("Edit assistant plugin")"> <MudTooltip Text="@T("Edit assistant plugin")">
<MudIconButton Icon="@Icons.Material.Filled.Code" Size="Size.Medium" OnClick="@(() => this.OpenAssistantPluginEditorDialogAsync(editablePlugin))"/> <MudIconButton Icon="@Icons.Material.Filled.Code" Size="Size.Medium" OnClick="@(() => this.OpenAssistantPluginEditorDialogAsync(editablePlugin))" Disabled="@(!CanEditAssistantPlugin(editablePlugin))"/>
</MudTooltip> </MudTooltip>
} }
@if (context is IAvailablePlugin shareablePlugin && CanSharePlugin(shareablePlugin)) @if (context is IAvailablePlugin shareablePlugin && CanSharePlugin(shareablePlugin))
{ {
<MudTooltip Text="@T("Share plugin archive")"> <MudTooltip Text="@T("Share plugin archive")">
<MudIconButton Icon="@Icons.Material.Filled.IosShare" Size="Size.Medium" OnClick="@(() => this.SharePluginAsync(shareablePlugin))"/> <MudIconButton Icon="@Icons.Material.Filled.IosShare" Size="Size.Medium" OnClick="@(() => this.SharePluginAsync(shareablePlugin))" Disabled="@(!CanSharePlugin(shareablePlugin))"/>
</MudTooltip> </MudTooltip>
} }
@if (context is IAvailablePlugin revisionPlugin && CanReviseAssistantPlugin(revisionPlugin)) @if (context is IAvailablePlugin revisionPlugin && CanReviseAssistantPlugin(revisionPlugin))
{ {
<MudTooltip Text="@T("Revise assistant plugin with AI")"> <MudTooltip Text="@T("Revise assistant plugin with AI")">
<MudIconButton Icon="@Icons.Material.Filled.AutoMode" Size="Size.Medium" OnClick="@(() => this.OpenAssistantPluginRevisionDialogAsync(revisionPlugin))"/> <MudIconButton Icon="@Icons.Material.Filled.AutoMode" Size="Size.Medium" OnClick="@(() => this.OpenAssistantPluginRevisionDialogAsync(revisionPlugin))" Disabled="@(!CanReviseAssistantPlugin(revisionPlugin))"/>
</MudTooltip> </MudTooltip>
} }

View File

@ -204,19 +204,16 @@ public partial class Plugins : MSGComponentBase
: this.T("Enable plugin"); : this.T("Enable plugin");
} }
private static bool CanEditAssistantPlugin(IAvailablePlugin plugin) => plugin is { IsInternal: false, Type: PluginType.ASSISTANT } && private static bool CanEditAssistantPlugin(IAvailablePlugin plugin) => plugin is { IsInternal: false, Type: PluginType.ASSISTANT } && !string.IsNullOrWhiteSpace(plugin.LocalPath) && !IS_SHARING_PLUGIN;
!string.IsNullOrWhiteSpace(plugin.LocalPath) && !IS_SHARING_PLUGIN;
private static bool CanReviseAssistantPlugin(IAvailablePlugin plugin) private static bool CanReviseAssistantPlugin(IAvailablePlugin plugin)
{ {
var assistantPlugin = PluginFactory.RunningPlugins.OfType<PluginAssistants>().FirstOrDefault(x => x.Id == plugin.Id); var assistantPlugin = PluginFactory.RunningPlugins.OfType<PluginAssistants>().FirstOrDefault(x => x.Id == plugin.Id);
return plugin is { IsInternal: false, IsManagedByConfigServer: false, Type: PluginType.ASSISTANT } && return plugin is { IsInternal: false, IsManagedByConfigServer: false, Type: PluginType.ASSISTANT } && !string.IsNullOrWhiteSpace(plugin.LocalPath) && assistantPlugin?.IsManagedByConfigServer is false && !IS_SHARING_PLUGIN;
!string.IsNullOrWhiteSpace(plugin.LocalPath) && assistantPlugin?.IsManagedByConfigServer is false && !IS_SHARING_PLUGIN;
} }
private static bool CanSharePlugin(IAvailablePlugin plugin) => plugin is { IsInternal: false, IsManagedByConfigServer: false } && private static bool CanSharePlugin(IAvailablePlugin plugin) => plugin is { IsInternal: false, IsManagedByConfigServer: false } && !string.IsNullOrWhiteSpace(plugin.LocalPath) && !IS_SHARING_PLUGIN;
!string.IsNullOrWhiteSpace(plugin.LocalPath) && !IS_SHARING_PLUGIN;
private async Task OpenAssistantPluginEditorDialogAsync(IAvailablePlugin plugin) private async Task OpenAssistantPluginEditorDialogAsync(IAvailablePlugin plugin)
{ {
var parameters = new DialogParameters<AssistantPluginEditorDialog> var parameters = new DialogParameters<AssistantPluginEditorDialog>