diff --git a/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxiesPage.razor.cs b/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxiesPage.razor.cs
index c333ae9..7e2b251 100644
--- a/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxiesPage.razor.cs
+++ b/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxiesPage.razor.cs
@@ -84,9 +84,28 @@ public partial class CaddyReverseProxiesPage : ComponentBase
private void Refresh()
{
var notSearching = string.IsNullOrWhiteSpace(_debouncedText);
- _availableCaddyConfigurations = [..CaddyService.GetExistingCaddyConfigurations()
+ var configurations = CaddyService.GetExistingCaddyConfigurations()
.Where(conf => notSearching || conf.FileName.Contains(_debouncedText, StringComparison.OrdinalIgnoreCase) || conf.ReverseProxyHostname.Contains(_debouncedText, StringComparison.OrdinalIgnoreCase))
- .OrderBy(conf => conf.FileName)];
+ .OrderBy(conf => conf.FileName)
+ .ToList();
+
+ // Optimize by grouping by ReverseProxyHostname and computing once per group
+ var hostnameToAggregatedPorts = configurations
+ .GroupBy(c => c.ReverseProxyHostname)
+ .ToDictionary(
+ g => g.Key,
+ g => g.SelectMany(c => c.ReverseProxyPorts)
+ .Distinct()
+ .OrderBy(p => p)
+ .ToList()
+ );
+
+ foreach (var config in configurations)
+ {
+ config.AggregatedReverseProxyPorts = hostnameToAggregatedPorts[config.ReverseProxyHostname];
+ }
+
+ _availableCaddyConfigurations = [..configurations];
StateHasChanged();
}
diff --git a/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxyItem.razor b/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxyItem.razor
index e830624..928b381 100644
--- a/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxyItem.razor
+++ b/CaddyManager/Components/Pages/Caddy/CaddyReverseProxies/CaddyReverseProxyItem.razor
@@ -7,7 +7,20 @@
@ConfigurationInfo.FileName
- @ConfigurationInfo.ReverseProxyHostname
+
+
+ @ConfigurationInfo.ReverseProxyHostname
+
+
+ @if (ConfigurationInfo.AggregatedReverseProxyPorts?.Count > 0)
+ {
+ @foreach (var port in ConfigurationInfo.AggregatedReverseProxyPorts.OrderBy(p => p))
+ {
+ ⏵ @port
+ }
+ }
+
+
public string FileName { get; set; } = string.Empty;
+
+ ///
+ /// Aggregated ports for the reverse proxy hostname from all configurations.
+ ///
+ public List AggregatedReverseProxyPorts { get; set; } = [];
}
\ No newline at end of file