diff --git a/Server/Components/Scripts/RunScript.razor b/Server/Components/Scripts/RunScript.razor
index 5838fe68..1cffdfdb 100644
--- a/Server/Components/Scripts/RunScript.razor
+++ b/Server/Components/Scripts/RunScript.razor
@@ -15,7 +15,7 @@
Show only mine
- Show only mine
-
Show only mine
- ChildItems { get; } = new();
public SavedScript Script { get; init; }
}
diff --git a/Server/Pages/ScriptsPage.razor b/Server/Pages/ScriptsPage.razor
index aa09be59..885f5e4a 100644
--- a/Server/Pages/ScriptsPage.razor
+++ b/Server/Pages/ScriptsPage.razor
@@ -32,7 +32,9 @@
@code {
- private IEnumerable? _filteredScriptNodes;
+ private readonly List _treeNodes = new();
+ private IEnumerable _allScripts = Enumerable.Empty();
+
private bool _showOnlyMyScripts = true;
[Parameter]
@@ -43,34 +45,24 @@
get => _showOnlyMyScripts;
set
{
- _filteredScriptNodes = null;
_showOnlyMyScripts = value;
+ _treeNodes.Clear();
}
}
- public List TreeNodes { get; } = new();
- public IEnumerable FilteredScriptNodes
+ public IEnumerable TreeNodes
{
get
{
- if (_filteredScriptNodes?.Any() == true)
+ if (_treeNodes?.Any() == true)
{
- return _filteredScriptNodes;
+ return _treeNodes;
}
- if (ShowOnlyMyScripts)
- {
- _filteredScriptNodes = TreeNodes.Where(x =>
- x.Script.CreatorId == User.Id);
- }
- else
- {
- _filteredScriptNodes = TreeNodes.Where(x =>
- x.Script.IsPublic || x.Script.CreatorId == User.Id);
- }
+ RefreshTreeNodes();
- return _filteredScriptNodes;
+ return _treeNodes;
}
}
@@ -85,31 +77,9 @@
public async Task RefreshScripts()
{
- TreeNodes.Clear();
- _filteredScriptNodes = null;
+ _treeNodes.Clear();
- var allScripts = await DataService.GetSavedScriptsWithoutContent(User.Id, User.OrganizationID);
-
- foreach (var script in allScripts)
- {
- var root = BuildFolderPath(script.FolderPath);
- root.Add(new ScriptTreeNode()
- {
- Name = script.Name,
- Script = script,
- ItemType = TreeItemType.Item
- });
- }
-
- TreeNodes.Sort((a, b) =>
- {
- if (a.ItemType != b.ItemType)
- {
- return Comparer.Default.Compare(a.ItemType, b.ItemType);
- }
-
- return Comparer.Default.Compare(a.Name, b.Name);
- });
+ _allScripts = await DataService.GetSavedScriptsWithoutContent(User.Id, User.OrganizationID);
}
protected override async Task OnInitializedAsync()
@@ -119,13 +89,14 @@
}
- private List BuildFolderPath(string folderPath)
+ private void CreateTreeNode(SavedScript script)
{
- var root = TreeNodes;
+ var root = _treeNodes;
+ ScriptTreeNode? targetParent = null;
- if (!string.IsNullOrWhiteSpace(folderPath))
+ if (!string.IsNullOrWhiteSpace(script.FolderPath))
{
- var paths = folderPath.Split("/", StringSplitOptions.RemoveEmptyEntries);
+ var paths = script.FolderPath.Split("/", StringSplitOptions.RemoveEmptyEntries);
for (var i = 0; i < paths.Length; i++)
{
var existingParent = root.Find(x => x.Name == paths[i]);
@@ -135,18 +106,58 @@
var newItem = new ScriptTreeNode()
{
Name = paths[i],
- ItemType = TreeItemType.Folder
+ ItemType = TreeItemType.Folder,
+ ParentNode = existingParent
};
root.Add(newItem);
root = newItem.ChildItems;
+ targetParent = newItem;
}
else
{
root = existingParent.ChildItems;
+ targetParent = existingParent;
}
}
}
- return root;
+ var scriptNode = new ScriptTreeNode()
+ {
+ Name = script.Name,
+ Script = script,
+ ItemType = TreeItemType.Item,
+ ParentNode = targetParent
+ };
+
+ root.Add(scriptNode);
+ }
+
+ private void RefreshTreeNodes()
+ {
+ _treeNodes.Clear();
+
+ foreach (var script in _allScripts)
+ {
+ var showScript = ShowOnlyMyScripts ?
+ script.CreatorId == User.Id :
+ script.CreatorId == User.Id || script.IsPublic;
+
+ if (!showScript)
+ {
+ continue;
+ }
+
+ CreateTreeNode(script);
+ }
+
+ _treeNodes.Sort((a, b) =>
+ {
+ if (a.ItemType != b.ItemType)
+ {
+ return Comparer.Default.Compare(a.ItemType, b.ItemType);
+ }
+
+ return Comparer.Default.Compare(a.Name, b.Name);
+ });
}
}
diff --git a/Server/Services/DataService.cs b/Server/Services/DataService.cs
index 423b4d06..8c8c7f5a 100644
--- a/Server/Services/DataService.cs
+++ b/Server/Services/DataService.cs
@@ -655,12 +655,12 @@ namespace Remotely.Server.Services
{
if (currentUser.IsServerAdmin)
{
- dbContext.EventLogs.RemoveRange(dbContext.EventLogs);
+ await dbContext.EventLogs.ExecuteDeleteAsync();
}
else
{
var eventLogs = dbContext.EventLogs.Where(x => x.OrganizationID == currentUser.OrganizationID);
- dbContext.EventLogs.RemoveRange(eventLogs);
+ await eventLogs.ExecuteDeleteAsync();
}
await dbContext.SaveChangesAsync();