From 7ea13f60a739dec0cda1d1cc8ecd4b2ecd23f58e Mon Sep 17 00:00:00 2001 From: Meik Date: Mon, 13 Jul 2026 12:08:04 +0200 Subject: [PATCH] fix(search): avoid duplicate external ticket tabs --- .../Basics/Helper/TicketDeepLinkHelper.cs | 4 ++-- .../Pages/SearchPage/SearchPageView.xaml.cs | 18 +++++++++++++----- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/FasdDesktopUi/Basics/Helper/TicketDeepLinkHelper.cs b/FasdDesktopUi/Basics/Helper/TicketDeepLinkHelper.cs index e97fb38..e1daa0e 100644 --- a/FasdDesktopUi/Basics/Helper/TicketDeepLinkHelper.cs +++ b/FasdDesktopUi/Basics/Helper/TicketDeepLinkHelper.cs @@ -15,7 +15,7 @@ namespace FasdDesktopUi.Basics.Helper { private const string DefaultTicketActivityType = "SPSActivityTypeTicket"; - internal static bool TryOpenTicketRelationExternally(cF4sdApiSearchResultRelation relation) + internal static bool TryOpenTicketRelationExternally(cF4sdApiSearchResultRelation relation, bool forceExternal = false) { try { @@ -28,7 +28,7 @@ namespace FasdDesktopUi.Basics.Helper // check if we have a valid user id in the id list => if not we could open this ticket only extern. var hasUser = HasValidUserIdentity(relation); - if (!hasUser) + if (forceExternal || !hasUser) processing = enumTicketProcessing.Extern; if (processing == enumTicketProcessing.Intern) diff --git a/FasdDesktopUi/Pages/SearchPage/SearchPageView.xaml.cs b/FasdDesktopUi/Pages/SearchPage/SearchPageView.xaml.cs index 2f9df92..ec63afd 100644 --- a/FasdDesktopUi/Pages/SearchPage/SearchPageView.xaml.cs +++ b/FasdDesktopUi/Pages/SearchPage/SearchPageView.xaml.cs @@ -1008,8 +1008,11 @@ namespace FasdDesktopUi.Pages.SearchPage if (relation == null || relation.Type != enumF4sdSearchResultClass.Ticket) return Task.CompletedTask; - if (TryOpenTicketOverviewRelationExternally(relation)) + if (!TicketExternalLinkHelper.HasValidUserIdentity(relation)) + { + TryOpenTicketOverviewRelationExternally(relation, forceExternal: true); return Task.CompletedTask; + } var ticketName = string.IsNullOrWhiteSpace(relation.DisplayName) ? relation.Name : relation.DisplayName; var ticketId = relation.id; @@ -1028,15 +1031,15 @@ namespace FasdDesktopUi.Pages.SearchPage relation.Infos.TryGetValue("UserSid", out sids); } - return RunTicketSearchAsync(ticketName, ticketId, userName, sids, suppressUi: true); + return RunTicketSearchAsync(ticketName, ticketId, userName, sids, suppressUi: true, ticketOverviewRelation: relation); } - private bool TryOpenTicketOverviewRelationExternally(cF4sdApiSearchResultRelation relation) + private bool TryOpenTicketOverviewRelationExternally(cF4sdApiSearchResultRelation relation, bool forceExternal = false) { - return TicketExternalLinkHelper.TryOpenTicketRelationExternally(relation); + return TicketExternalLinkHelper.TryOpenTicketRelationExternally(relation, forceExternal); } - private Task RunTicketSearchAsync(string ticketName, Guid ticketId, string userName, string sids, bool suppressUi = false) + private Task RunTicketSearchAsync(string ticketName, Guid ticketId, string userName, string sids, bool suppressUi = false, cF4sdApiSearchResultRelation ticketOverviewRelation = null) { if (ticketId == Guid.Empty) return Task.CompletedTask; @@ -1054,6 +1057,7 @@ namespace FasdDesktopUi.Pages.SearchPage if (_result is null || _result.Count == 0 || _result.First().Value.Count == 0) { LogEntry($"No corresponding user could be found for ticket '{ticketName}'", LogLevels.Warning); + TryOpenTicketOverviewRelationExternally(ticketOverviewRelation, forceExternal: true); if (suppressUi) EndTicketOverviewAutoContinue(showSearch: true); return; @@ -1063,6 +1067,7 @@ namespace FasdDesktopUi.Pages.SearchPage if (userId == Guid.Empty) { LogEntry($"No valid user id could be found for ticket '{ticketName}'", LogLevels.Warning); + TryOpenTicketOverviewRelationExternally(ticketOverviewRelation, forceExternal: true); if (suppressUi) EndTicketOverviewAutoContinue(showSearch: true); return; @@ -1074,6 +1079,9 @@ namespace FasdDesktopUi.Pages.SearchPage DisplayName = ticketName, id = ticketId, Status = enumF4sdSearchResultStatus.Active, + Infos = ticketOverviewRelation?.Infos == null + ? null + : new Dictionary(ticketOverviewRelation.Infos), Identities = new cF4sdIdentityList { new cF4sdIdentityEntry()