feat: expand cockpit integrations and support workflows
Add Phoenix remote desktop, action connector, documentation engine, and gamification support. Refactor support-case processing and search/action UI, and update installer assets and dependencies.
This commit is contained in:
@@ -1,37 +1,37 @@
|
||||
using System;
|
||||
using C4IT.FASD.Base;
|
||||
using C4IT.FASD.Cockpit.Communication;
|
||||
using C4IT.MultiLanguage;
|
||||
using FasdDesktopUi.Basics;
|
||||
using FasdDesktopUi.Basics.Converter;
|
||||
using FasdDesktopUi.Basics.CustomEvents;
|
||||
using FasdDesktopUi.Basics.Helper;
|
||||
using FasdDesktopUi.Basics.Models;
|
||||
using FasdDesktopUi.Basics.Services.SupportCase.Controllers;
|
||||
using FasdDesktopUi.Basics.UiActions;
|
||||
using FasdDesktopUi.Basics.UserControls;
|
||||
using FasdDesktopUi.Basics.UserControls.QuickTip;
|
||||
using FasdDesktopUi.Pages.DetailsPage.Models;
|
||||
using FasdDesktopUi.Pages.DetailsPage.UserControls;
|
||||
using FasdDesktopUi.Pages.DetailsPage.ViewModels;
|
||||
using FasdDesktopUi.Pages.SettingsPage;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Documents;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Interop;
|
||||
using System.Windows.Media.Effects;
|
||||
using System.Windows.Controls;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Media.Animation;
|
||||
using System.Windows.Threading;
|
||||
using System.Windows.Documents;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Media.Animation;
|
||||
using System.Windows.Media.Effects;
|
||||
using System.Windows.Shell;
|
||||
|
||||
using FasdDesktopUi.Basics;
|
||||
using FasdDesktopUi.Basics.UiActions;
|
||||
using FasdDesktopUi.Basics.UserControls;
|
||||
using FasdDesktopUi.Basics.Models;
|
||||
using FasdDesktopUi.Basics.Helper;
|
||||
using FasdDesktopUi.Pages.SettingsPage;
|
||||
using FasdDesktopUi.Pages.DetailsPage.Models;
|
||||
using FasdDesktopUi.Pages.DetailsPage.ViewModels;
|
||||
using FasdDesktopUi.Pages.DetailsPage.UserControls;
|
||||
|
||||
using C4IT.FASD.Base;
|
||||
using C4IT.MultiLanguage;
|
||||
|
||||
using System.Windows.Threading;
|
||||
using static C4IT.Logging.cLogManager;
|
||||
using F4SD_AdaptableIcon.Enums;
|
||||
using FasdDesktopUi.Basics.CustomEvents;
|
||||
using FasdDesktopUi.Basics.Converter;
|
||||
using FasdDesktopUi.Basics.Services.SupportCase.Controllers;
|
||||
using static System.Windows.Forms.AxHost;
|
||||
|
||||
namespace FasdDesktopUi.Pages.DetailsPage
|
||||
{
|
||||
@@ -107,7 +107,7 @@ namespace FasdDesktopUi.Pages.DetailsPage
|
||||
case SettingsPageBase _:
|
||||
case CustomMessageBox.CustomMessageBox _:
|
||||
case TicketCompletion.TicketCompletion _:
|
||||
case SearchBar _:
|
||||
case InformationClassSearchBar _:
|
||||
case SuccessPage.SuccessPage _:
|
||||
case BlurInvokerContainer _:
|
||||
return true;
|
||||
@@ -201,8 +201,8 @@ namespace FasdDesktopUi.Pages.DetailsPage
|
||||
}
|
||||
|
||||
private void HandleAvailableRelationsAdded(object sender, RelationEventArgs e)
|
||||
{
|
||||
}
|
||||
=> Dispatcher.Invoke(() => NavigationHeadingUc.HeadingData = _supportCaseController.GetHeadingData().ToList());
|
||||
|
||||
|
||||
private void HandleFocusedRelationsChanged(object sender, RelationEventArgs e)
|
||||
{
|
||||
@@ -234,15 +234,15 @@ namespace FasdDesktopUi.Pages.DetailsPage
|
||||
|
||||
isDataChangedEventRunning = true;
|
||||
|
||||
Dispatcher.Invoke(() =>
|
||||
Dispatcher.Invoke(async () =>
|
||||
{
|
||||
if (QuickActionDecorator.Child is DataCanvas dataCanvas)
|
||||
Dispatcher.Invoke(async () => await dataCanvas.UpdateDataAsync());
|
||||
_ = Dispatcher.Invoke(async () => await dataCanvas.UpdateDataAsync());
|
||||
|
||||
if (WidgetCollection.WidgetDataList is null || WidgetCollection.WidgetDataList.Count == 0)
|
||||
WidgetCollection.WidgetDataList = _supportCaseController?.GetWidgetData();
|
||||
WidgetCollection.WidgetDataList = _supportCaseController?.GetWidgetsData();
|
||||
|
||||
WidgetCollection.UpdateWidgetData(_supportCaseController?.GetWidgetData());
|
||||
WidgetCollection.UpdateWidgetData(_supportCaseController?.GetWidgetsData());
|
||||
|
||||
if (DataHistoryCollectionUserControl.HistoryDataList is null || DataHistoryCollectionUserControl.HistoryDataList.Count == 0)
|
||||
DataHistoryCollectionUserControl.HistoryDataList = _supportCaseController?.GetHistoryData();
|
||||
@@ -255,7 +255,9 @@ namespace FasdDesktopUi.Pages.DetailsPage
|
||||
CustomizableSectionUc.UpdateContainerCollection(_supportCaseController?.GetContainerData());
|
||||
|
||||
if (this.DataContext is DetailsPageViewModel viewModel)
|
||||
viewModel.MenuBarData = _supportCaseController?.GetMenuBarData();
|
||||
viewModel.MenuBarData = _supportCaseController?.GetMenuData().ToList();
|
||||
|
||||
UpdateQuickActionSelectorVisibility();
|
||||
|
||||
if (_lastDesiredHeightOfWidgetCollection != WidgetCollection.DesiredSize.Height)
|
||||
{
|
||||
@@ -263,6 +265,10 @@ namespace FasdDesktopUi.Pages.DetailsPage
|
||||
MainGrid.InvalidateMeasure();
|
||||
MainGrid.UpdateLayout();
|
||||
}
|
||||
|
||||
var footerMenuData = _supportCaseController.GetMenuData().FirstOrDefault(data => data.UiAction is UiNativeQuickAction);
|
||||
FooterBtn.QuickAction = footerMenuData?.UiAction as cUiQuickAction;
|
||||
FooterBtn.LabelText = footerMenuData?.MenuText;
|
||||
});
|
||||
|
||||
if (shouldReRunDataChangedEvent)
|
||||
@@ -275,6 +281,41 @@ namespace FasdDesktopUi.Pages.DetailsPage
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateQuickActionSelectorVisibility()
|
||||
{
|
||||
try
|
||||
{
|
||||
cHealthCard selectedHealthcard = _supportCaseController.SupportCaseDataProviderArtifact.HealthCardDataHelper.SelectedHealthCard;
|
||||
bool showHistorySection = selectedHealthcard.CategoriesHistory?.StateCategories != null && selectedHealthcard.CategoriesHistory.StateCategories.Count > 0;
|
||||
|
||||
if (showHistorySection && cFasdCockpitConfig.Instance.IsHistoryQuickActionSelectorVisible)
|
||||
{
|
||||
QuickActionSelectorUc.IsLocked = cFasdCockpitConfig.Instance.IsHistoryQuickActionSelectorVisible;
|
||||
MoreButtonClickedAction();
|
||||
}
|
||||
else if (!showHistorySection && cFasdCockpitConfig.Instance.IsCustomizableQuickActionSelectorVisible)
|
||||
{
|
||||
var ticketMenuData = _supportCaseController.GetMenuData().FirstOrDefault(menuData => menuData.MenuText == "Ticket");
|
||||
|
||||
if (ticketMenuData != null)
|
||||
if (ticketMenuData is cMenuDataContainer containerMenuData)
|
||||
{
|
||||
QuickActionSelectorUc.QuickActionSelectorHeading = containerMenuData.MenuText;
|
||||
QuickActionSelectorUc.QuickActionList = containerMenuData.SubMenuData;
|
||||
}
|
||||
|
||||
QuickActionSelectorUc.IsLocked = cFasdCockpitConfig.Instance.IsCustomizableQuickActionSelectorVisible;
|
||||
|
||||
if (cFasdCockpitConfig.Instance.IsCustomizableQuickActionSelectorVisible)
|
||||
QuickActionSelectorUc.Visibility = Visibility.Visible;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the visibility of History and Customizable Section based on the currently selected Healthcard.
|
||||
/// </summary>
|
||||
@@ -597,6 +638,7 @@ namespace FasdDesktopUi.Pages.DetailsPage
|
||||
// define drawing area
|
||||
UIElement drawingArea = this;
|
||||
|
||||
|
||||
switch (e.UiAction)
|
||||
{
|
||||
case cChangeHealthCardAction _:
|
||||
@@ -604,6 +646,11 @@ namespace FasdDesktopUi.Pages.DetailsPage
|
||||
case UiShowRawHealthcardValues _:
|
||||
break;
|
||||
case cUiQuickAction _:
|
||||
if (!(e.OriginalSource is QuickTipStep) && QuickTipStatusMonitorUc.IsVisible && !QuickTipStatusMonitorUc.TryCancelQuickTip())
|
||||
return;
|
||||
drawingArea = QuickActionDecorator;
|
||||
ToggleHorizontalCollapse(true, true);
|
||||
break;
|
||||
case cShowRecommendationAction _:
|
||||
case cShowDetailedDataAction _:
|
||||
drawingArea = QuickActionDecorator;
|
||||
@@ -678,7 +725,7 @@ namespace FasdDesktopUi.Pages.DetailsPage
|
||||
{
|
||||
IconTimerPanel.HorizontalAlignment = HorizontalAlignment.Right;
|
||||
IconTimerPanel.Children.Remove(F4SDIcon);
|
||||
IconTimerPanel.Children.Insert(1, F4SDIcon);
|
||||
IconTimerPanel.Children.Insert(IconTimerPanel.Children.Count, F4SDIcon);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -687,6 +734,7 @@ namespace FasdDesktopUi.Pages.DetailsPage
|
||||
IconTimerPanel.Children.Insert(0, F4SDIcon);
|
||||
}
|
||||
|
||||
FooterBtn.HorizontalAlignment = cFasdCockpitConfig.Instance.Global.FavouriteBarAlignment == enumF4sdHorizontalAlignment.Center ? HorizontalAlignment.Right : HorizontalAlignment.Center;
|
||||
MenuBarUserControl.HorizontalAlignment = InternalEnumConverter.GetHorizontalAlignment(cFasdCockpitConfig.Instance.Global.FavouriteBarAlignment);
|
||||
}
|
||||
catch (Exception E)
|
||||
@@ -699,6 +747,7 @@ namespace FasdDesktopUi.Pages.DetailsPage
|
||||
{
|
||||
UpdateHistoryWidth();
|
||||
UpdateFooterPositions();
|
||||
LevelTrackerUc.Visibility = cFasdCockpitConfig.Instance.Global.UseGamification ? Visibility.Visible : Visibility.Collapsed;
|
||||
}
|
||||
|
||||
private void ApiConnectionStatusChanged(cConnectionStatusHelper.enumOnlineStatus? Status)
|
||||
@@ -923,13 +972,27 @@ namespace FasdDesktopUi.Pages.DetailsPage
|
||||
break;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Close Quick Action Section
|
||||
if (e.Key == Key.Escape && QuickActionSelectorUc.Visibility == Visibility.Visible)
|
||||
{
|
||||
CloseQuickActionSelector();
|
||||
return;
|
||||
}
|
||||
|
||||
if (FocusManager.GetFocusedElement(this) is TextBox)
|
||||
return;
|
||||
bool isTextInputFocused = FocusManager.GetFocusedElement(this) is TextBox || FocusManager.GetFocusedElement(this) is RichTextBox;
|
||||
|
||||
if (FocusManager.GetFocusedElement(this) is RichTextBox)
|
||||
// Open Quick Action Section
|
||||
if (e.Key == Key.Q && !isTextInputFocused)
|
||||
{
|
||||
MoreButtonClickedAction();
|
||||
e.Handled = true;
|
||||
return;
|
||||
}
|
||||
|
||||
if (isTextInputFocused)
|
||||
return;
|
||||
|
||||
List<DetailsPageDataHistorySection> unpinnedDataHistories = DataHistoryCollectionUserControl.HistorySectionControls.Where(x => !x.IsVerticalExpandLocked).ToList();
|
||||
@@ -970,9 +1033,6 @@ namespace FasdDesktopUi.Pages.DetailsPage
|
||||
if (Keyboard.Modifiers == ModifierKeys.Control)
|
||||
SearchButtonClickedAction();
|
||||
break;
|
||||
case Key.Q:
|
||||
MoreButtonClickedAction();
|
||||
break;
|
||||
case Key.NumPad0:
|
||||
case Key.D0:
|
||||
if (Keyboard.Modifiers != ModifierKeys.Control)
|
||||
@@ -1177,8 +1237,6 @@ namespace FasdDesktopUi.Pages.DetailsPage
|
||||
{
|
||||
tempSubMenuList.Add(new cMenuDataBase(copyTemplate.Value));
|
||||
}
|
||||
|
||||
tempMoreQuickActionList.Insert(0, new cMenuDataContainer() { MenuText = cMultiLanguageSupport.GetItem("QuickAction.CopyContent"), MenuIcon = new F4SD_AdaptableIcon.IconData(enumInternIcons.menuBar_copy), UiAction = new cSubMenuAction(true) { Name = cMultiLanguageSupport.GetItem("QuickAction.CopyContent"), SubMenuData = tempSubMenuList }, SubMenuData = tempSubMenuList });
|
||||
}
|
||||
|
||||
QuickActionSelectorUc.QuickActionList = tempMoreQuickActionList;
|
||||
@@ -1187,6 +1245,10 @@ namespace FasdDesktopUi.Pages.DetailsPage
|
||||
ToggleHorizontalCollapse(true);
|
||||
QuickActionSelectorUc.Visibility = Visibility.Visible;
|
||||
QuickActionSelectorUc.CloseButtonClickedAction = BlurBorder_Click;
|
||||
QuickActionSelectorUc.Search.ActivateManualSearch();
|
||||
QuickActionSelectorUc.Search.FocusInput();
|
||||
QuickActionSelectorUc.Search.Clear();
|
||||
|
||||
}
|
||||
catch (Exception E)
|
||||
{
|
||||
@@ -1256,6 +1318,7 @@ namespace FasdDesktopUi.Pages.DetailsPage
|
||||
notepad.Visibility = Visibility.Collapsed;
|
||||
NotepadVisibility = false;
|
||||
|
||||
ResetWindowFocus();
|
||||
ChangeNotepadNotification();
|
||||
}
|
||||
else
|
||||
@@ -1451,6 +1514,29 @@ namespace FasdDesktopUi.Pages.DetailsPage
|
||||
ReinitializeNotepad();
|
||||
DataHistoryCollectionUserControl.ToggleVerticalCollapseDetails(true);
|
||||
UpdateHistoryWidth();
|
||||
|
||||
Task.Run(async () =>
|
||||
{
|
||||
if (await cFasdCockpitCommunicationBase.Instance.RemoteDesktopManager.IsRemoteDesktopCommunicationAvailable())
|
||||
Dispatcher.Invoke(() => FooterBtn.Visibility = Visibility.Visible);
|
||||
});
|
||||
}
|
||||
catch (Exception E)
|
||||
{
|
||||
LogException(E);
|
||||
}
|
||||
}
|
||||
|
||||
private void ResetWindowFocus()
|
||||
{
|
||||
try
|
||||
{
|
||||
Window window = Window.GetWindow(this);
|
||||
if (window == null)
|
||||
return;
|
||||
|
||||
FocusManager.SetFocusedElement(window, window);
|
||||
Keyboard.Focus(window);
|
||||
}
|
||||
catch (Exception E)
|
||||
{
|
||||
@@ -1701,5 +1787,30 @@ namespace FasdDesktopUi.Pages.DetailsPage
|
||||
QuickActionDecorator.Visibility = Visibility.Collapsed;
|
||||
}
|
||||
|
||||
private void QuickActionSelectorUc_SearchValueChanged(object sender, string e)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(e))
|
||||
{
|
||||
QuickActionSelectorUc.QuickActionList = _supportCaseController.GetMenuData().ToList();
|
||||
QuickActionSelectorUc.QuickActionSelectorHeading = "Quick Actions";
|
||||
return;
|
||||
}
|
||||
|
||||
QuickActionSelectorUc.QuickActionList = _supportCaseController.GetFilteredMenuData(new MenuDataFilter(e)).ToList();
|
||||
|
||||
}
|
||||
|
||||
private void CloseQuickActionSelector()
|
||||
{
|
||||
try
|
||||
{
|
||||
QuickActionSelectorUc.CloseButton_Click();
|
||||
QuickActionSelectorUc.Search.Clear();
|
||||
}
|
||||
catch (Exception E)
|
||||
{
|
||||
LogException(E);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user