fix sorting and cleanup

This commit is contained in:
rootdarkarchon
2023-10-27 17:56:44 +02:00
parent 1a64f08841
commit f8ad8f3d79
2 changed files with 99 additions and 88 deletions

View File

@@ -29,8 +29,6 @@ namespace MareSynchronos.UI;
public class CompactUi : WindowMediatorSubscriberBase public class CompactUi : WindowMediatorSubscriberBase
{ {
public float TransferPartHeight;
public float WindowContentWidth;
private readonly ApiController _apiController; private readonly ApiController _apiController;
private readonly MareConfigService _configService; private readonly MareConfigService _configService;
private readonly ConcurrentDictionary<GameObjectHandler, Dictionary<string, FileDownloadStatus>> _currentDownloads = new(); private readonly ConcurrentDictionary<GameObjectHandler, Dictionary<string, FileDownloadStatus>> _currentDownloads = new();
@@ -39,8 +37,8 @@ public class CompactUi : WindowMediatorSubscriberBase
private readonly PairManager _pairManager; private readonly PairManager _pairManager;
private readonly SelectTagForPairUi _selectGroupForPairUi; private readonly SelectTagForPairUi _selectGroupForPairUi;
private readonly SelectPairForTagUi _selectPairsForGroupUi; private readonly SelectPairForTagUi _selectPairsForGroupUi;
private readonly TopTabMenu _tabMenu;
private readonly ServerConfigurationManager _serverManager; private readonly ServerConfigurationManager _serverManager;
private readonly TopTabMenu _tabMenu;
private readonly TagHandler _tagHandler; private readonly TagHandler _tagHandler;
private readonly UiSharedService _uiShared; private readonly UiSharedService _uiShared;
private List<IDrawFolder> _drawFolders; private List<IDrawFolder> _drawFolders;
@@ -50,8 +48,9 @@ public class CompactUi : WindowMediatorSubscriberBase
private Vector2 _lastSize = Vector2.One; private Vector2 _lastSize = Vector2.One;
private int _secretKeyIdx = -1; private int _secretKeyIdx = -1;
private bool _showModalForUserAddition; private bool _showModalForUserAddition;
private float _transferPartHeight;
private bool _wasOpen; private bool _wasOpen;
private float _windowContentWidth;
public CompactUi(ILogger<CompactUi> logger, UiSharedService uiShared, MareConfigService configService, ApiController apiController, PairManager pairManager, public CompactUi(ILogger<CompactUi> logger, UiSharedService uiShared, MareConfigService configService, ApiController apiController, PairManager pairManager,
ServerConfigurationManager serverManager, MareMediator mediator, FileUploadManager fileTransferManager, ServerConfigurationManager serverManager, MareMediator mediator, FileUploadManager fileTransferManager,
@@ -100,7 +99,7 @@ public class CompactUi : WindowMediatorSubscriberBase
public override void Draw() public override void Draw()
{ {
WindowContentWidth = UiSharedService.GetWindowContentRegionWidth(); _windowContentWidth = UiSharedService.GetWindowContentRegionWidth();
if (!_apiController.IsCurrentVersion) if (!_apiController.IsCurrentVersion)
{ {
var ver = _apiController.CurrentClientVersion; var ver = _apiController.CurrentClientVersion;
@@ -125,11 +124,10 @@ public class CompactUi : WindowMediatorSubscriberBase
{ {
using (ImRaii.PushId("global-topmenu")) _tabMenu.Draw(); using (ImRaii.PushId("global-topmenu")) _tabMenu.Draw();
using (ImRaii.PushId("pairlist")) DrawPairs(); using (ImRaii.PushId("pairlist")) DrawPairs();
TransferPartHeight = ImGui.GetCursorPosY();
ImGui.Separator(); ImGui.Separator();
float pairlistEnd = ImGui.GetCursorPosY();
using (ImRaii.PushId("transfers")) DrawTransfers(); using (ImRaii.PushId("transfers")) DrawTransfers();
TransferPartHeight = ImGui.GetCursorPosY() - TransferPartHeight - ImGui.GetTextLineHeight(); _transferPartHeight = ImGui.GetCursorPosY() - pairlistEnd - ImGui.GetTextLineHeight();
using (ImRaii.PushId("group-user-popup")) _selectPairsForGroupUi.Draw(_pairManager.DirectPairs); using (ImRaii.PushId("group-user-popup")) _selectPairsForGroupUi.Draw(_pairManager.DirectPairs);
using (ImRaii.PushId("grouping-popup")) _selectGroupForPairUi.Draw(); using (ImRaii.PushId("grouping-popup")) _selectGroupForPairUi.Draw();
} }
@@ -175,23 +173,6 @@ public class CompactUi : WindowMediatorSubscriberBase
} }
} }
private void DrawPairs()
{
var ySize = TransferPartHeight == 0
? 1
: (ImGui.GetWindowContentRegionMax().Y - ImGui.GetWindowContentRegionMin().Y
+ ImGui.GetTextLineHeight() - ImGui.GetStyle().WindowPadding.Y - ImGui.GetStyle().WindowBorderSize) - TransferPartHeight - ImGui.GetCursorPosY();
ImGui.BeginChild("list", new Vector2(WindowContentWidth, ySize), border: false);
foreach (var item in _drawFolders)
{
item.Draw();
}
ImGui.EndChild();
}
private void DrawAddCharacter() private void DrawAddCharacter()
{ {
ImGui.Dummy(new(10)); ImGui.Dummy(new(10));
@@ -221,6 +202,22 @@ public class CompactUi : WindowMediatorSubscriberBase
} }
} }
private void DrawPairs()
{
var ySize = _transferPartHeight == 0
? 1
: (ImGui.GetWindowContentRegionMax().Y - ImGui.GetWindowContentRegionMin().Y
+ ImGui.GetTextLineHeight() - ImGui.GetStyle().WindowPadding.Y - ImGui.GetStyle().WindowBorderSize) - _transferPartHeight - ImGui.GetCursorPosY();
ImGui.BeginChild("list", new Vector2(_windowContentWidth, ySize), border: false);
foreach (var item in _drawFolders)
{
item.Draw();
}
ImGui.EndChild();
}
private void DrawServerStatus() private void DrawServerStatus()
{ {
var buttonSize = UiSharedService.GetIconButtonSize(FontAwesomeIcon.Link); var buttonSize = UiSharedService.GetIconButtonSize(FontAwesomeIcon.Link);
@@ -304,7 +301,7 @@ public class CompactUi : WindowMediatorSubscriberBase
ImGui.TextUnformatted($"{doneUploads}/{totalUploads}"); ImGui.TextUnformatted($"{doneUploads}/{totalUploads}");
var uploadText = $"({UiSharedService.ByteToString(totalUploaded)}/{UiSharedService.ByteToString(totalToUpload)})"; var uploadText = $"({UiSharedService.ByteToString(totalUploaded)}/{UiSharedService.ByteToString(totalToUpload)})";
var textSize = ImGui.CalcTextSize(uploadText); var textSize = ImGui.CalcTextSize(uploadText);
ImGui.SameLine(WindowContentWidth - textSize.X); ImGui.SameLine(_windowContentWidth - textSize.X);
ImGui.TextUnformatted(uploadText); ImGui.TextUnformatted(uploadText);
} }
else else
@@ -327,7 +324,7 @@ public class CompactUi : WindowMediatorSubscriberBase
var downloadText = var downloadText =
$"({UiSharedService.ByteToString(totalDownloaded)}/{UiSharedService.ByteToString(totalToDownload)})"; $"({UiSharedService.ByteToString(totalDownloaded)}/{UiSharedService.ByteToString(totalToDownload)})";
var textSize = ImGui.CalcTextSize(downloadText); var textSize = ImGui.CalcTextSize(downloadText);
ImGui.SameLine(WindowContentWidth - textSize.X); ImGui.SameLine(_windowContentWidth - textSize.X);
ImGui.TextUnformatted(downloadText); ImGui.TextUnformatted(downloadText);
} }
else else
@@ -394,8 +391,8 @@ public class CompactUi : WindowMediatorSubscriberBase
List<IDrawFolder> drawFolders = []; List<IDrawFolder> drawFolders = [];
var allPairs = _pairManager.PairsWithGroups var allPairs = _pairManager.PairsWithGroups
.ToImmutableDictionary(k => k.Key, k => k.Value); .ToDictionary(k => k.Key, k => k.Value);
var filteredUsers = allPairs var filteredPairs = allPairs
.Where(p => .Where(p =>
{ {
if (_tabMenu.Filter.IsNullOrEmpty()) return true; if (_tabMenu.Filter.IsNullOrEmpty()) return true;
@@ -403,42 +400,48 @@ public class CompactUi : WindowMediatorSubscriberBase
(p.Key.GetNote()?.Contains(_tabMenu.Filter, StringComparison.OrdinalIgnoreCase) ?? false) || (p.Key.GetNote()?.Contains(_tabMenu.Filter, StringComparison.OrdinalIgnoreCase) ?? false) ||
(p.Key.PlayerName?.Contains(_tabMenu.Filter, StringComparison.OrdinalIgnoreCase) ?? false); (p.Key.PlayerName?.Contains(_tabMenu.Filter, StringComparison.OrdinalIgnoreCase) ?? false);
}) })
.ToImmutableDictionary(k => k.Key, k => k.Value); .ToDictionary(k => k.Key, k => k.Value);
string? alphabeticalSortFunc(KeyValuePair<Pair, List<GroupFullInfoDto>> u) string? AlphabeticalSort(KeyValuePair<Pair, List<GroupFullInfoDto>> u)
=> (_configService.Current.ShowCharacterNameInsteadOfNotesForVisible && !string.IsNullOrEmpty(u.Key.PlayerName) => (_configService.Current.ShowCharacterNameInsteadOfNotesForVisible && !string.IsNullOrEmpty(u.Key.PlayerName)
? (_configService.Current.PreferNotesOverNamesForVisible ? u.Key.GetNote() : u.Key.PlayerName) ? (_configService.Current.PreferNotesOverNamesForVisible ? u.Key.GetNote() : u.Key.PlayerName)
: (u.Key.GetNote() ?? u.Key.UserData.AliasOrUID)); : (u.Key.GetNote() ?? u.Key.UserData.AliasOrUID));
bool FilterOnlineOrPausedSelf(KeyValuePair<Pair, List<GroupFullInfoDto>> u)
=> (u.Key.IsOnline || (!u.Key.IsOnline && !_configService.Current.ShowOfflineUsersSeparately)
|| u.Key.UserPair.OwnPermissions.IsPaused());
if (_configService.Current.ShowVisibleUsersSeparately) if (_configService.Current.ShowVisibleUsersSeparately)
{ {
var allUsers = allPairs bool BaseFilterVisibleUsers(KeyValuePair<Pair, List<GroupFullInfoDto>> u) =>
.Where(u => u.Key.IsVisible u.Key.IsVisible
&& (_configService.Current.ShowSyncshellUsersInVisible || !(!_configService.Current.ShowSyncshellUsersInVisible && !u.Key.IsDirectlyPaired))) && (_configService.Current.ShowSyncshellUsersInVisible || !(!_configService.Current.ShowSyncshellUsersInVisible && !u.Key.IsDirectlyPaired));
var allVisiblePairs = allPairs
.Where(BaseFilterVisibleUsers)
.Select(k => k.Key) .Select(k => k.Key)
.ToImmutableList(); .ToImmutableList();
var visibleUsers = filteredUsers var filteredVisiblePairs = filteredPairs
.Where(u => u.Key.IsVisible .Where(BaseFilterVisibleUsers)
&& (_configService.Current.ShowSyncshellUsersInVisible || !(!_configService.Current.ShowSyncshellUsersInVisible && !u.Key.IsDirectlyPaired))) .OrderBy(AlphabeticalSort, StringComparer.OrdinalIgnoreCase)
.OrderBy(alphabeticalSortFunc, StringComparer.OrdinalIgnoreCase) .ToDictionary(k => k.Key, k => k.Value);
.ToImmutableDictionary(k => k.Key, k => k.Value);
drawFolders.Add(_drawEntityFactory.CreateDrawTagFolder(TagHandler.CustomVisibleTag, visibleUsers, allUsers)); drawFolders.Add(_drawEntityFactory.CreateDrawTagFolder(TagHandler.CustomVisibleTag, filteredVisiblePairs, allVisiblePairs));
} }
List<IDrawFolder> groupFolders = new(); List<IDrawFolder> groupFolders = new();
foreach (var group in _pairManager.GroupPairs.Select(g => g.Key).OrderBy(g => g.GroupAliasOrGID, StringComparer.OrdinalIgnoreCase)) foreach (var group in _pairManager.GroupPairs.Select(g => g.Key).OrderBy(g => g.GroupAliasOrGID, StringComparer.OrdinalIgnoreCase))
{ {
var allUsers = allPairs bool BaseFilterGroupUsers(KeyValuePair<Pair, List<GroupFullInfoDto>> u, GroupFullInfoDto group) =>
.Where(v => v.Value.Exists(g => string.Equals(g.GID, group.GID, StringComparison.Ordinal))) u.Value.Exists(g => string.Equals(g.GID, group.GID, StringComparison.Ordinal));
var allGroupPairs = allPairs
.Where(u => BaseFilterGroupUsers(u, group))
.Select(k => k.Key) .Select(k => k.Key)
.ToImmutableList(); .ToImmutableList();
var groupUsers = filteredUsers var filteredGroupPairs = filteredPairs
.Where(v => v.Value.Exists(g => string.Equals(g.GID, group.GID, StringComparison.Ordinal)) .Where(u => BaseFilterGroupUsers(u, group) && FilterOnlineOrPausedSelf(u))
&& (v.Key.IsOnline || (!v.Key.IsOnline && !_configService.Current.ShowOfflineUsersSeparately)
|| v.Key.UserPair.OwnPermissions.IsPaused()))
.OrderByDescending(u => u.Key.IsOnline) .OrderByDescending(u => u.Key.IsOnline)
.ThenBy(u => .ThenBy(u =>
{ {
@@ -450,10 +453,10 @@ public class CompactUi : WindowMediatorSubscriberBase
} }
return u.Key.IsVisible ? 3 : 4; return u.Key.IsVisible ? 3 : 4;
}) })
.ThenBy(alphabeticalSortFunc, StringComparer.OrdinalIgnoreCase) .ThenBy(AlphabeticalSort, StringComparer.OrdinalIgnoreCase)
.ToImmutableDictionary(k => k.Key, k => k.Value); .ToDictionary(k => k.Key, k => k.Value);
groupFolders.Add(_drawEntityFactory.CreateDrawGroupFolder(group, groupUsers, allUsers)); groupFolders.Add(_drawEntityFactory.CreateDrawGroupFolder(group, filteredGroupPairs, allGroupPairs));
} }
if (_configService.Current.GroupUpSyncshells) if (_configService.Current.GroupUpSyncshells)
@@ -465,80 +468,86 @@ public class CompactUi : WindowMediatorSubscriberBase
HashSet<Pair> alreadyInTags = []; HashSet<Pair> alreadyInTags = [];
foreach (var tag in tags) foreach (var tag in tags)
{ {
var allUsers = allPairs bool BaseFilterTagUsers(KeyValuePair<Pair, List<GroupFullInfoDto>> u, string tag) =>
.Where(u => u.Key.IsDirectlyPaired && !u.Key.IsOneSidedPair && _tagHandler.HasTag(u.Key.UserData.UID, tag)) u.Key.IsDirectlyPaired && !u.Key.IsOneSidedPair && _tagHandler.HasTag(u.Key.UserData.UID, tag);
var allTagPairs = allPairs
.Where(u => BaseFilterTagUsers(u, tag))
.Select(k => k.Key) .Select(k => k.Key)
.ToImmutableList(); .ToImmutableList();
var tagUsers = filteredUsers var filteredTagPairs = filteredPairs
.Where(u => u.Key.IsDirectlyPaired && !u.Key.IsOneSidedPair && _tagHandler.HasTag(u.Key.UserData.UID, tag) .Where(u => BaseFilterTagUsers(u, tag) && FilterOnlineOrPausedSelf(u))
&& (u.Key.IsOnline || (!u.Key.IsOnline && !_configService.Current.ShowOfflineUsersSeparately)
|| u.Key.UserPair.OwnPermissions.IsPaused()))
.OrderByDescending(u => u.Key.IsVisible) .OrderByDescending(u => u.Key.IsVisible)
.ThenByDescending(u => u.Key.IsOnline) .ThenByDescending(u => u.Key.IsOnline)
.ThenBy(alphabeticalSortFunc, StringComparer.OrdinalIgnoreCase); .ThenBy(AlphabeticalSort, StringComparer.OrdinalIgnoreCase);
drawFolders.Add(_drawEntityFactory.CreateDrawTagFolder(tag, tagUsers.Select(u => drawFolders.Add(_drawEntityFactory.CreateDrawTagFolder(tag, filteredTagPairs.Select(u =>
{ {
alreadyInTags.Add(u.Key); alreadyInTags.Add(u.Key);
return (u.Key, u.Value); return (u.Key, u.Value);
}).ToImmutableDictionary(u => u.Key, u => u.Value), allUsers)); }).ToDictionary(u => u.Key, u => u.Value), allTagPairs));
} }
var onlineAllPairedUsersNotInTags = allPairs bool BaseFilterNotTaggedUsers(KeyValuePair<Pair, List<GroupFullInfoDto>> u) =>
.Where(u => u.Key.IsDirectlyPaired && !u.Key.IsOneSidedPair && !_tagHandler.HasAnyTag(u.Key.UserData.UID)) u.Key.IsDirectlyPaired && !u.Key.IsOneSidedPair && !_tagHandler.HasAnyTag(u.Key.UserData.UID);
var allOnlineNotTaggedPairs = allPairs
.Where(BaseFilterNotTaggedUsers)
.Select(k => k.Key) .Select(k => k.Key)
.ToImmutableList(); .ToImmutableList();
var onlineDirectPairedUsersNotInTags = filteredUsers var onlineNotTaggedPairs = filteredPairs
.Where(u => u.Key.IsDirectlyPaired && !u.Key.IsOneSidedPair && !_tagHandler.HasAnyTag(u.Key.UserData.UID) .Where(u => BaseFilterNotTaggedUsers(u) && FilterOnlineOrPausedSelf(u))
&& (u.Key.IsOnline || (!u.Key.IsOnline && !_configService.Current.ShowOfflineUsersSeparately)
|| u.Key.UserPair.OwnPermissions.IsPaused()))
.OrderByDescending(u => u.Key.IsVisible) .OrderByDescending(u => u.Key.IsVisible)
.ThenByDescending(u => u.Key.IsOnline) .ThenByDescending(u => u.Key.IsOnline)
.ThenBy(alphabeticalSortFunc, StringComparer.OrdinalIgnoreCase) .ThenBy(AlphabeticalSort, StringComparer.OrdinalIgnoreCase)
.ToImmutableDictionary(u => u.Key, u => u.Value); .ToDictionary(u => u.Key, u => u.Value);
drawFolders.Add(_drawEntityFactory.CreateDrawTagFolder((_configService.Current.ShowOfflineUsersSeparately ? TagHandler.CustomOnlineTag : TagHandler.CustomAllTag), drawFolders.Add(_drawEntityFactory.CreateDrawTagFolder((_configService.Current.ShowOfflineUsersSeparately ? TagHandler.CustomOnlineTag : TagHandler.CustomAllTag),
onlineDirectPairedUsersNotInTags, onlineAllPairedUsersNotInTags)); onlineNotTaggedPairs, allOnlineNotTaggedPairs));
if (_configService.Current.ShowOfflineUsersSeparately) if (_configService.Current.ShowOfflineUsersSeparately)
{ {
var allOfflineUsersEntries = allPairs bool BaseFilterOfflineUsers(KeyValuePair<Pair, List<GroupFullInfoDto>> u) =>
.Where(u => ((u.Key.IsDirectlyPaired && _configService.Current.ShowSyncshellOfflineUsersSeparately) ((u.Key.IsDirectlyPaired && _configService.Current.ShowSyncshellOfflineUsersSeparately)
|| !_configService.Current.ShowSyncshellOfflineUsersSeparately) || !_configService.Current.ShowSyncshellOfflineUsersSeparately)
&& (!u.Key.IsOneSidedPair || u.Value.Any()) && !u.Key.IsOnline && !u.Key.UserPair.OwnPermissions.IsPaused()) && (!u.Key.IsOneSidedPair || u.Value.Any()) && !u.Key.IsOnline && !u.Key.UserPair.OwnPermissions.IsPaused();
var allOfflinePairs = allPairs
.Where(BaseFilterOfflineUsers)
.Select(k => k.Key) .Select(k => k.Key)
.ToImmutableList(); .ToImmutableList();
var offlineUsersEntries = filteredUsers var filteredOfflinePairs = filteredPairs
.Where(u => ((u.Key.IsDirectlyPaired && _configService.Current.ShowSyncshellOfflineUsersSeparately) .Where(BaseFilterOfflineUsers)
|| !_configService.Current.ShowSyncshellOfflineUsersSeparately) .OrderBy(AlphabeticalSort, StringComparer.OrdinalIgnoreCase)
&& (!u.Key.IsOneSidedPair || u.Value.Any()) && !u.Key.IsOnline && !u.Key.UserPair.OwnPermissions.IsPaused()) .ToDictionary(u => u.Key, u => u.Value);
.OrderBy(alphabeticalSortFunc, StringComparer.OrdinalIgnoreCase)
.ToImmutableDictionary(u => u.Key, u => u.Value);
drawFolders.Add(_drawEntityFactory.CreateDrawTagFolder(TagHandler.CustomOfflineTag, offlineUsersEntries, allOfflineUsersEntries)); drawFolders.Add(_drawEntityFactory.CreateDrawTagFolder(TagHandler.CustomOfflineTag, filteredOfflinePairs, allOfflinePairs));
if (_configService.Current.ShowSyncshellOfflineUsersSeparately) if (_configService.Current.ShowSyncshellOfflineUsersSeparately)
{ {
bool BaseFilterOfflineSyncshellUsers(KeyValuePair<Pair, List<GroupFullInfoDto>> u) =>
(!u.Key.IsDirectlyPaired && !u.Key.IsOnline && !u.Key.UserPair.OwnPermissions.IsPaused());
var allOfflineSyncshellUsers = allPairs var allOfflineSyncshellUsers = allPairs
.Where(u => !u.Key.IsDirectlyPaired && !u.Key.IsOnline && !u.Key.UserPair.OwnPermissions.IsPaused()) .Where(BaseFilterOfflineSyncshellUsers)
.Select(k => k.Key) .Select(k => k.Key)
.ToImmutableList(); .ToImmutableList();
var offlineSyncshellUsers = allPairs var filteredOfflineSyncshellUsers = filteredPairs
.Where(u => !u.Key.IsDirectlyPaired && !u.Key.IsOnline && !u.Key.UserPair.OwnPermissions.IsPaused()) .Where(BaseFilterOfflineSyncshellUsers)
.OrderBy(alphabeticalSortFunc, StringComparer.OrdinalIgnoreCase) .OrderBy(AlphabeticalSort, StringComparer.OrdinalIgnoreCase)
.ToImmutableDictionary(k => k.Key, k => k.Value); .ToDictionary(k => k.Key, k => k.Value);
drawFolders.Add(_drawEntityFactory.CreateDrawTagFolder(TagHandler.CustomOfflineSyncshellTag, drawFolders.Add(_drawEntityFactory.CreateDrawTagFolder(TagHandler.CustomOfflineSyncshellTag,
offlineSyncshellUsers, filteredOfflineSyncshellUsers,
allOfflineSyncshellUsers)); allOfflineSyncshellUsers));
} }
} }
drawFolders.Add(_drawEntityFactory.CreateDrawTagFolder(TagHandler.CustomUnpairedTag, drawFolders.Add(_drawEntityFactory.CreateDrawTagFolder(TagHandler.CustomUnpairedTag,
filteredUsers.Where(u => u.Key.IsOneSidedPair).ToImmutableDictionary(u => u.Key, u => u.Value), filteredPairs.Where(u => u.Key.IsOneSidedPair).ToDictionary(u => u.Key, u => u.Value),
allPairs.Where(u => u.Key.IsOneSidedPair).Select(k => k.Key).ToImmutableList())); allPairs.Where(u => u.Key.IsOneSidedPair).Select(k => k.Key).ToImmutableList()));
return drawFolders; return drawFolders;

View File

@@ -36,18 +36,20 @@ public class DrawEntityFactory
_serverConfigurationManager = serverConfigurationManager; _serverConfigurationManager = serverConfigurationManager;
} }
public DrawFolderGroup CreateDrawGroupFolder(GroupFullInfoDto groupFullInfoDto, IImmutableDictionary<Pair, List<GroupFullInfoDto>> pairs, public DrawFolderGroup CreateDrawGroupFolder(GroupFullInfoDto groupFullInfoDto,
Dictionary<Pair, List<GroupFullInfoDto>> filteredPairs,
IImmutableList<Pair> allPairs) IImmutableList<Pair> allPairs)
{ {
return new DrawFolderGroup(groupFullInfoDto.Group.GID, groupFullInfoDto, _apiController, return new DrawFolderGroup(groupFullInfoDto.Group.GID, groupFullInfoDto, _apiController,
pairs.Select(p => CreateDrawPair(groupFullInfoDto.Group.GID + p.Key.UserData.UID, p.Key, p.Value)).ToImmutableList(), filteredPairs.Select(p => CreateDrawPair(groupFullInfoDto.Group.GID + p.Key.UserData.UID, p.Key, p.Value)).ToImmutableList(),
allPairs, _tagHandler, _uidDisplayHandler, _mediator); allPairs, _tagHandler, _uidDisplayHandler, _mediator);
} }
public DrawFolderTag CreateDrawTagFolder(string tag, IImmutableDictionary<Pair, List<GroupFullInfoDto>> pairs, public DrawFolderTag CreateDrawTagFolder(string tag,
Dictionary<Pair, List<GroupFullInfoDto>> filteredPairs,
IImmutableList<Pair> allPairs) IImmutableList<Pair> allPairs)
{ {
return new(tag, pairs.Select(u => CreateDrawPair(tag, u.Key, u.Value)).ToImmutableList(), return new(tag, filteredPairs.Select(u => CreateDrawPair(tag, u.Key, u.Value)).ToImmutableList(),
allPairs, _tagHandler, _apiController, _selectPairForTagUi); allPairs, _tagHandler, _apiController, _selectPairForTagUi);
} }