Skip to content

Commit 9e09e71

Browse files
AmanPrasad43amanprasravirk91
authored
Shared repository folder item fix (#4454)
* Shared repository folder item fix * Column hide for Overriting Share repo --------- Co-authored-by: amanpras <amanpras@amdocs.com> Co-authored-by: Ravi Kumar <41137863+ravirk91@users.noreply.github.com>
1 parent 79a5966 commit 9e09e71

5 files changed

Lines changed: 183 additions & 3 deletions

File tree

Ginger/Ginger/AutomatePageLib/AddActionMenu/SharedRepositoryLib/ActionsRepositoryPage.xaml.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ private void SetGridAndTreeData()
7878
{
7979
xActionListView.DataSourceList = mActionsFolder.GetFolderItems();
8080
}
81-
xActionListView.SetFolderTreeRoot(new SharedActionsFolderTreeItem(mActionsFolder));
81+
xActionListView.SetFolderTreeRootFactory(() => new SharedActionsFolderTreeItem(mActionsFolder));
8282
xActionListView.IsToggleButtonVisible = true;
8383
}
8484

Ginger/Ginger/AutomatePageLib/AddActionMenu/SharedRepositoryLib/ActivitiesGroupsRepositoryPage.xaml.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ private void SetGridAndTreeData()
7474
{
7575
xActivitiesGroupsRepositoryListView.DataSourceList = mActivitiesGroupFolder.GetFolderItems();
7676
}
77-
xActivitiesGroupsRepositoryListView.SetFolderTreeRoot(new SharedActivitiesGroupsFolderTreeItem(mActivitiesGroupFolder));
77+
xActivitiesGroupsRepositoryListView.SetFolderTreeRootFactory(() => new SharedActivitiesGroupsFolderTreeItem(mActivitiesGroupFolder));
7878
xActivitiesGroupsRepositoryListView.IsToggleButtonVisible = true;
7979
}
8080

Ginger/Ginger/AutomatePageLib/AddActionMenu/SharedRepositoryLib/ActivitiesRepositoryPage.xaml.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ private void SetGridAndTreeData()
134134
xActivitiesRepositoryListView.DataSourceList = mActivitiesFolder.GetFolderItems();
135135
}
136136

137-
xActivitiesRepositoryListView.SetFolderTreeRoot(new SharedActivitiesFolderTreeItem(mActivitiesFolder));
137+
xActivitiesRepositoryListView.SetFolderTreeRootFactory(() => new SharedActivitiesFolderTreeItem(mActivitiesFolder));
138138
xActivitiesRepositoryListView.IsToggleButtonVisible = true;
139139
}
140140

Ginger/Ginger/AutomatePageLib/AddActionMenu/SharedRepositoryLib/AddItemToRepositoryWizard/UploadItemsSelectionPage.xaml.cs

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ limitations under the License.
2929
using Amdocs.Ginger.UserControls;
3030
using GingerCore.Activities;
3131
using GingerCore.Variables;
32+
using System;
33+
using System.ComponentModel;
34+
using System.Globalization;
35+
using System.Linq;
3236

3337
namespace Ginger.Repository.ItemToRepositoryWizard
3438
{
@@ -37,15 +41,99 @@ namespace Ginger.Repository.ItemToRepositoryWizard
3741
/// </summary>
3842
public partial class UploadItemsSelectionPage : Page, IWizardPage
3943
{
44+
/// <summary>
45+
/// Converter to invert boolean to visibility (true -> Collapsed, false -> Visible)
46+
/// </summary>
47+
private class BoolToVisibilityInvertConverter : IValueConverter
48+
{
49+
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
50+
{
51+
if (value is bool boolValue)
52+
{
53+
return boolValue ? Visibility.Collapsed : Visibility.Visible;
54+
}
55+
return Visibility.Visible; // Default to visible if not a bool
56+
}
57+
58+
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
59+
{
60+
if (value is Visibility visibility)
61+
{
62+
return visibility != Visibility.Visible;
63+
}
64+
return false;
65+
}
66+
}
4067
public UploadItemToRepositoryWizard UploadItemToRepositoryWizard;
4168
public UploadItemsValidationPage itemValidate;
4269
bool isConvertPage = false;
70+
ObservableList<UploadItemSelection> mItemsList;
71+
4372
public UploadItemsSelectionPage(ObservableList<UploadItemSelection> items, bool isConvert)
4473
{
4574
InitializeComponent();
4675
isConvertPage = isConvert;
76+
mItemsList = items;
4777
SetSelectedItemsGridView();
4878
itemSelectionGrid.DataSourceList = items;
79+
80+
// Listen to ItemUploadType changes to show/hide folder column dynamically
81+
items.CollectionChanged += Items_CollectionChanged;
82+
foreach (var item in items)
83+
{
84+
item.PropertyChanged += Item_PropertyChanged;
85+
}
86+
87+
// Update folder column visibility after grid is loaded
88+
this.Loaded += UploadItemsSelectionPage_Loaded;
89+
}
90+
91+
private void UploadItemsSelectionPage_Loaded(object sender, RoutedEventArgs e)
92+
{
93+
// Initial update of folder column visibility
94+
UpdateFolderColumnVisibility();
95+
}
96+
97+
private void Items_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
98+
{
99+
if (e.NewItems != null)
100+
{
101+
foreach (UploadItemSelection item in e.NewItems)
102+
{
103+
item.PropertyChanged += Item_PropertyChanged;
104+
}
105+
}
106+
if (e.OldItems != null)
107+
{
108+
foreach (UploadItemSelection item in e.OldItems)
109+
{
110+
item.PropertyChanged -= Item_PropertyChanged;
111+
}
112+
}
113+
UpdateFolderColumnVisibility();
114+
}
115+
116+
private void Item_PropertyChanged(object sender, PropertyChangedEventArgs e)
117+
{
118+
if (e.PropertyName == nameof(UploadItemSelection.ItemUploadType) ||
119+
e.PropertyName == nameof(UploadItemSelection.IsOverrite))
120+
{
121+
UpdateFolderColumnVisibility();
122+
}
123+
}
124+
125+
private void UpdateFolderColumnVisibility()
126+
{
127+
// Show folder column only if there's at least one item that is NOT overwrite
128+
bool shouldShowFolderColumn = mItemsList.Any(item => !item.IsOverrite);
129+
130+
var folderColumn = itemSelectionGrid.grdMain.Columns.FirstOrDefault(c =>
131+
c.Header != null && c.Header.ToString() == "Add to Folder");
132+
133+
if (folderColumn != null)
134+
{
135+
folderColumn.Visibility = shouldShowFolderColumn ? Visibility.Visible : Visibility.Collapsed;
136+
}
49137
}
50138

51139
private void SetSelectedItemsGridView()
@@ -165,6 +253,13 @@ private DataTemplate CreateSelectFolderTemplate()
165253
panel.SetValue(FrameworkElement.HorizontalAlignmentProperty, HorizontalAlignment.Stretch);
166254
panel.SetValue(FrameworkElement.VerticalAlignmentProperty, VerticalAlignment.Center);
167255

256+
//// Hide folder selection UI for overwrite items (folder cannot be changed during overwrite)
257+
//panel.SetBinding(UIElement.VisibilityProperty, new Binding(nameof(UploadItemSelection.IsOverrite))
258+
//{
259+
// Converter = new BoolToVisibilityInvertConverter(),
260+
// Mode = BindingMode.OneWay
261+
//});
262+
168263
var txt = new FrameworkElementFactory(typeof(TextBlock));
169264
txt.SetValue(TextBlock.VerticalAlignmentProperty, VerticalAlignment.Center);
170265
txt.SetValue(TextBlock.MarginProperty, new Thickness(0, 0, 6, 0));

Ginger/Ginger/UserControlsLib/UCListView/UcListView.xaml.cs

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ public bool IsToggleButtonVisible
124124

125125
bool mFolderViewActive = false;
126126
ITreeViewItem mFolderTreeRoot;
127+
Func<ITreeViewItem> mFolderTreeRootFactory;
127128
CancellationTokenSource? mTreeSearchCts;
128129

129130
public void SetFolderTreeRoot(ITreeViewItem root)
@@ -135,6 +136,17 @@ public void SetFolderTreeRoot(ITreeViewItem root)
135136
xFolderTreeView.AddItem(mFolderTreeRoot);
136137
}
137138
}
139+
140+
public void SetFolderTreeRootFactory(Func<ITreeViewItem> factory)
141+
{
142+
mFolderTreeRootFactory = factory;
143+
mFolderTreeRoot = factory();
144+
if (xFolderTreeView != null)
145+
{
146+
xFolderTreeView.ClearTreeItems();
147+
xFolderTreeView.AddItem(mFolderTreeRoot);
148+
}
149+
}
138150
public UcListView()
139151
{
140152
InitializeComponent();
@@ -401,11 +413,71 @@ NotifyCollectionChangedAction.Remove or
401413
NotifyCollectionChangedAction.Move)
402414
{
403415
OnUcListViewEvent(UcListViewEventArgs.eEventType.UpdateIndex);
416+
417+
// Refresh folder tree view when items are added/removed/modified
418+
if (mFolderTreeRoot != null && xFolderTreeView != null)
419+
{
420+
RefreshFolderTreeView();
421+
}
404422
}
405423
UpdateTitleListCount();
406424
});
407425
}
408426

427+
private void RefreshFolderTreeView()
428+
{
429+
try
430+
{
431+
this.Dispatcher.Invoke(() =>
432+
{
433+
if (xFolderTreeView != null && xFolderTreeView.Tree != null && xFolderTreeView.Tree.Items.Count > 0)
434+
{
435+
// Create a fresh tree root to avoid cached children
436+
if (mFolderTreeRootFactory != null)
437+
{
438+
mFolderTreeRoot = mFolderTreeRootFactory();
439+
}
440+
441+
if (mFolderTreeRoot != null)
442+
{
443+
xFolderTreeView.ClearTreeItems();
444+
xFolderTreeView.AddItem(mFolderTreeRoot);
445+
}
446+
// Refresh all expanded nodes in the tree
447+
RefreshExpandedTreeNodes(xFolderTreeView.Tree.Items[0] as TreeViewItem);
448+
}
449+
});
450+
}
451+
catch (Exception ex)
452+
{
453+
Reporter.ToLog(eLogLevel.ERROR, "Failed to refresh folder tree view", ex);
454+
}
455+
}
456+
457+
private void RefreshExpandedTreeNodes(TreeViewItem treeNode)
458+
{
459+
if (treeNode == null)
460+
{
461+
return;
462+
}
463+
464+
if (treeNode.IsExpanded && treeNode.Items.Count > 0)
465+
{
466+
var firstChild = treeNode.Items[0] as TreeViewItem;
467+
if (firstChild != null)
468+
{
469+
xFolderTreeView.RefreshTreeViewItemChildrens(treeNode);
470+
}
471+
472+
// Recursively refreshing child nodes
473+
var childItems = treeNode.Items.Cast<TreeViewItem>().ToList();
474+
foreach (var childNode in childItems)
475+
{
476+
RefreshExpandedTreeNodes(childNode);
477+
}
478+
}
479+
}
480+
409481
private void UpdateTitleListCount()
410482
{
411483
this.Dispatcher.Invoke(() =>
@@ -1315,6 +1387,19 @@ private void xToggleBtn_Click(object sender, RoutedEventArgs e)
13151387
// ensure folders + items are presented for current tab root
13161388
xFolderTreeView.EnableDragDrop = true;
13171389
xFolderTreeView.TreeChildFolderOnly = false;
1390+
1391+
// Refresh the tree to show latest items from repository
1392+
// Create a fresh tree root to avoid cached children
1393+
if (mFolderTreeRootFactory != null)
1394+
{
1395+
mFolderTreeRoot = mFolderTreeRootFactory();
1396+
}
1397+
1398+
if (mFolderTreeRoot != null)
1399+
{
1400+
xFolderTreeView.ClearTreeItems();
1401+
xFolderTreeView.AddItem(mFolderTreeRoot);
1402+
}
13181403
}
13191404
else
13201405
{

0 commit comments

Comments
 (0)