You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							1138 lines
						
					
					
						
							60 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							1138 lines
						
					
					
						
							60 KiB
						
					
					
				
								// Code generated by templ - DO NOT EDIT.
							 | 
						|
								
							 | 
						|
								// templ: version: v0.3.906
							 | 
						|
								package app
							 | 
						|
								
							 | 
						|
								//lint:file-ignore SA4006 This context is only used if a nested component is present.
							 | 
						|
								
							 | 
						|
								import "github.com/a-h/templ"
							 | 
						|
								import templruntime "github.com/a-h/templ/runtime"
							 | 
						|
								
							 | 
						|
								import (
							 | 
						|
									"fmt"
							 | 
						|
									"github.com/seaweedfs/seaweedfs/weed/admin/dash"
							 | 
						|
									"strings"
							 | 
						|
								)
							 | 
						|
								
							 | 
						|
								func ClusterVolumes(data dash.ClusterVolumesData) templ.Component {
							 | 
						|
									return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
							 | 
						|
										templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
							 | 
						|
										if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
							 | 
						|
											return templ_7745c5c3_CtxErr
							 | 
						|
										}
							 | 
						|
										templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
							 | 
						|
										if !templ_7745c5c3_IsBuffer {
							 | 
						|
											defer func() {
							 | 
						|
												templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
							 | 
						|
												if templ_7745c5c3_Err == nil {
							 | 
						|
													templ_7745c5c3_Err = templ_7745c5c3_BufErr
							 | 
						|
												}
							 | 
						|
											}()
							 | 
						|
										}
							 | 
						|
										ctx = templ.InitializeContext(ctx)
							 | 
						|
										templ_7745c5c3_Var1 := templ.GetChildren(ctx)
							 | 
						|
										if templ_7745c5c3_Var1 == nil {
							 | 
						|
											templ_7745c5c3_Var1 = templ.NopComponent
							 | 
						|
										}
							 | 
						|
										ctx = templ.ClearChildren(ctx)
							 | 
						|
										templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "<div class=\"d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom\"><div><h1 class=\"h2\"><i class=\"fas fa-database me-2\"></i>Cluster Volumes</h1>")
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										if data.FilterCollection != "" {
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "<div class=\"d-flex align-items-center mt-2\"><span class=\"badge bg-info me-2\"><i class=\"fas fa-filter me-1\"></i>Collection: ")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											var templ_7745c5c3_Var2 string
							 | 
						|
											templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(data.FilterCollection)
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 18, Col: 92}
							 | 
						|
											}
							 | 
						|
											_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2))
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "</span> <a href=\"/cluster/volumes\" class=\"btn btn-sm btn-outline-secondary\"><i class=\"fas fa-times me-1\"></i>Clear Filter</a></div>")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
										templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, "</div><div class=\"btn-toolbar mb-2 mb-md-0\"><div class=\"btn-group me-2\"><select class=\"form-select form-select-sm me-2\" id=\"pageSizeSelect\" onchange=\"changePageSize()\" style=\"width: auto;\"><option value=\"50\"")
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										if data.PageSize == 50 {
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, " selected=\"selected\"")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
										templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, ">50 per page</option> <option value=\"100\"")
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										if data.PageSize == 100 {
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, " selected=\"selected\"")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
										templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, ">100 per page</option> <option value=\"200\"")
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										if data.PageSize == 200 {
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, " selected=\"selected\"")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
										templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, ">200 per page</option> <option value=\"500\"")
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										if data.PageSize == 500 {
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, " selected=\"selected\"")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
										templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, ">500 per page</option></select> <button type=\"button\" class=\"btn btn-sm btn-outline-primary\" onclick=\"exportVolumes()\"><i class=\"fas fa-download me-1\"></i>Export</button></div></div></div><div id=\"volumes-content\"><!-- Summary Cards --><div class=\"row mb-4\"><div class=\"col-xl-2 col-md-4 col-sm-6 mb-4\"><div class=\"card border-left-primary shadow h-100 py-2\"><div class=\"card-body\"><div class=\"row no-gutters align-items-center\"><div class=\"col mr-2\"><div class=\"text-xs font-weight-bold text-primary text-uppercase mb-1\">Total Volumes</div><div class=\"h5 mb-0 font-weight-bold text-gray-800\">")
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										var templ_7745c5c3_Var3 string
							 | 
						|
										templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", data.TotalVolumes))
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 53, Col: 73}
							 | 
						|
										}
							 | 
						|
										_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3))
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "</div></div><div class=\"col-auto\"><i class=\"fas fa-database fa-2x text-gray-300\"></i></div></div></div></div></div><div class=\"col-xl-2 col-md-4 col-sm-6 mb-4\"><div class=\"card border-left-success shadow h-100 py-2\"><div class=\"card-body\"><div class=\"row no-gutters align-items-center\"><div class=\"col mr-2\"><div class=\"text-xs font-weight-bold text-success text-uppercase mb-1\">")
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										if data.CollectionCount == 1 {
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, "Collection")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										} else {
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, "Collections")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
										templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "</div><div class=\"h5 mb-0 font-weight-bold text-gray-800\">")
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										if data.CollectionCount == 1 {
							 | 
						|
											var templ_7745c5c3_Var4 string
							 | 
						|
											templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(data.SingleCollection)
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 78, Col: 62}
							 | 
						|
											}
							 | 
						|
											_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4))
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										} else {
							 | 
						|
											var templ_7745c5c3_Var5 string
							 | 
						|
											templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", data.CollectionCount))
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 80, Col: 80}
							 | 
						|
											}
							 | 
						|
											_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5))
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
										templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, "</div></div><div class=\"col-auto\"><i class=\"fas fa-layer-group fa-2x text-gray-300\"></i></div></div></div></div></div><div class=\"col-xl-2 col-md-4 col-sm-6 mb-4\"><div class=\"card border-left-info shadow h-100 py-2\"><div class=\"card-body\"><div class=\"row no-gutters align-items-center\"><div class=\"col mr-2\"><div class=\"text-xs font-weight-bold text-info text-uppercase mb-1\">")
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										if data.DataCenterCount == 1 {
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 18, "Data Center")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										} else {
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "Data Centers")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
										templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "</div><div class=\"h5 mb-0 font-weight-bold text-gray-800\">")
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										if data.DataCenterCount == 1 {
							 | 
						|
											var templ_7745c5c3_Var6 string
							 | 
						|
											templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs(data.SingleDataCenter)
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 106, Col: 62}
							 | 
						|
											}
							 | 
						|
											_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var6))
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										} else {
							 | 
						|
											var templ_7745c5c3_Var7 string
							 | 
						|
											templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", data.DataCenterCount))
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 108, Col: 80}
							 | 
						|
											}
							 | 
						|
											_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7))
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
										templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "</div></div><div class=\"col-auto\"><i class=\"fas fa-building fa-2x text-gray-300\"></i></div></div></div></div></div><div class=\"col-xl-2 col-md-4 col-sm-6 mb-4\"><div class=\"card border-left-secondary shadow h-100 py-2\"><div class=\"card-body\"><div class=\"row no-gutters align-items-center\"><div class=\"col mr-2\"><div class=\"text-xs font-weight-bold text-secondary text-uppercase mb-1\">")
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										if data.RackCount == 1 {
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "Rack")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										} else {
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 23, "Racks")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
										templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "</div><div class=\"h5 mb-0 font-weight-bold text-gray-800\">")
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										if data.RackCount == 1 {
							 | 
						|
											var templ_7745c5c3_Var8 string
							 | 
						|
											templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.JoinStringErrs(data.SingleRack)
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 134, Col: 56}
							 | 
						|
											}
							 | 
						|
											_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var8))
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										} else {
							 | 
						|
											var templ_7745c5c3_Var9 string
							 | 
						|
											templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", data.RackCount))
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 136, Col: 74}
							 | 
						|
											}
							 | 
						|
											_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var9))
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
										templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, "</div></div><div class=\"col-auto\"><i class=\"fas fa-server fa-2x text-gray-300\"></i></div></div></div></div></div><div class=\"col-xl-2 col-md-4 col-sm-6 mb-4\"><div class=\"card border-left-dark shadow h-100 py-2\"><div class=\"card-body\"><div class=\"row no-gutters align-items-center\"><div class=\"col mr-2\"><div class=\"text-xs font-weight-bold text-dark text-uppercase mb-1\">")
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										if data.DiskTypeCount == 1 {
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, "Disk Type")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										} else {
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 27, "Disk Types")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
										templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 28, "</div><div class=\"h5 mb-0 font-weight-bold text-gray-800\">")
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										if data.DiskTypeCount == 1 {
							 | 
						|
											var templ_7745c5c3_Var10 string
							 | 
						|
											templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.JoinStringErrs(data.SingleDiskType)
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 162, Col: 60}
							 | 
						|
											}
							 | 
						|
											_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var10))
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										} else {
							 | 
						|
											var templ_7745c5c3_Var11 string
							 | 
						|
											templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(strings.Join(data.AllDiskTypes, ", "))
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 164, Col: 78}
							 | 
						|
											}
							 | 
						|
											_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11))
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
										templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 29, "</div></div><div class=\"col-auto\"><i class=\"fas fa-hdd fa-2x text-gray-300\"></i></div></div></div></div></div><div class=\"col-xl-2 col-md-4 col-sm-6 mb-4\"><div class=\"card border-left-purple shadow h-100 py-2\"><div class=\"card-body\"><div class=\"row no-gutters align-items-center\"><div class=\"col mr-2\"><div class=\"text-xs font-weight-bold text-purple text-uppercase mb-1\">")
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										if data.VersionCount == 1 {
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 30, "Version")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										} else {
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 31, "Versions")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
										templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 32, "</div><div class=\"h5 mb-0 font-weight-bold text-gray-800\">")
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										if data.VersionCount == 1 {
							 | 
						|
											var templ_7745c5c3_Var12 string
							 | 
						|
											templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinStringErrs(data.SingleVersion)
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 190, Col: 59}
							 | 
						|
											}
							 | 
						|
											_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var12))
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										} else {
							 | 
						|
											var templ_7745c5c3_Var13 string
							 | 
						|
											templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.JoinStringErrs(strings.Join(data.AllVersions, ", "))
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 192, Col: 77}
							 | 
						|
											}
							 | 
						|
											_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var13))
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
										templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, "</div></div><div class=\"col-auto\"><i class=\"fas fa-code-branch fa-2x text-gray-300\"></i></div></div></div></div></div><div class=\"col-xl-2 col-md-4 col-sm-6 mb-4\"><div class=\"card border-left-warning shadow h-100 py-2\"><div class=\"card-body\"><div class=\"row no-gutters align-items-center\"><div class=\"col mr-2\"><div class=\"text-xs font-weight-bold text-warning text-uppercase mb-1\">Total Size</div><div class=\"h5 mb-0 font-weight-bold text-gray-800\">")
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										var templ_7745c5c3_Var14 string
							 | 
						|
										templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.JoinStringErrs(formatBytes(data.TotalSize))
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 213, Col: 64}
							 | 
						|
										}
							 | 
						|
										_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var14))
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 34, "</div></div><div class=\"col-auto\"><i class=\"fas fa-chart-area fa-2x text-gray-300\"></i></div></div></div></div></div></div><!-- Volumes Table --><div class=\"card shadow mb-4\"><div class=\"card-header py-3\"><h6 class=\"m-0 font-weight-bold text-primary\"><i class=\"fas fa-database me-2\"></i>Volume Details</h6></div><div class=\"card-body\">")
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										if len(data.Volumes) > 0 {
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, "<div class=\"table-responsive\"><table class=\"table table-hover\" id=\"volumesTable\"><thead><tr><th><a href=\"#\" onclick=\"sortTable('id')\" class=\"text-decoration-none text-dark\">Volume ID")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											templ_7745c5c3_Err = getSortIcon("id", data.SortBy, data.SortOrder).Render(ctx, templ_7745c5c3_Buffer)
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, "</a></th><th><a href=\"#\" onclick=\"sortTable('server')\" class=\"text-decoration-none text-dark\">Server")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											templ_7745c5c3_Err = getSortIcon("server", data.SortBy, data.SortOrder).Render(ctx, templ_7745c5c3_Buffer)
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, "</a></th>")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											if data.ShowDataCenterColumn {
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, "<th><a href=\"#\" onclick=\"sortTable('datacenter')\" class=\"text-decoration-none text-dark\">Data Center")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = getSortIcon("datacenter", data.SortBy, data.SortOrder).Render(ctx, templ_7745c5c3_Buffer)
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, "</a></th>")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
											}
							 | 
						|
											if data.ShowRackColumn {
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, "<th><a href=\"#\" onclick=\"sortTable('rack')\" class=\"text-decoration-none text-dark\">Rack")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = getSortIcon("rack", data.SortBy, data.SortOrder).Render(ctx, templ_7745c5c3_Buffer)
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, "</a></th>")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
											}
							 | 
						|
											if data.ShowCollectionColumn {
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "<th><a href=\"#\" onclick=\"sortTable('collection')\" class=\"text-decoration-none text-dark\">Collection")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = getSortIcon("collection", data.SortBy, data.SortOrder).Render(ctx, templ_7745c5c3_Buffer)
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "</a></th>")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
											}
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, "<th><a href=\"#\" onclick=\"sortTable('size')\" class=\"text-decoration-none text-dark\">Size")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											templ_7745c5c3_Err = getSortIcon("size", data.SortBy, data.SortOrder).Render(ctx, templ_7745c5c3_Buffer)
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "</a></th><th>Volume Utilization</th><th><a href=\"#\" onclick=\"sortTable('filecount')\" class=\"text-decoration-none text-dark\">File Count")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											templ_7745c5c3_Err = getSortIcon("filecount", data.SortBy, data.SortOrder).Render(ctx, templ_7745c5c3_Buffer)
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 46, "</a></th><th><a href=\"#\" onclick=\"sortTable('replication')\" class=\"text-decoration-none text-dark\">Replication")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											templ_7745c5c3_Err = getSortIcon("replication", data.SortBy, data.SortOrder).Render(ctx, templ_7745c5c3_Buffer)
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, "</a></th>")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											if data.ShowDiskTypeColumn {
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, "<th><a href=\"#\" onclick=\"sortTable('disktype')\" class=\"text-decoration-none text-dark\">Disk Type")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = getSortIcon("disktype", data.SortBy, data.SortOrder).Render(ctx, templ_7745c5c3_Buffer)
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 49, "</a></th>")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
											}
							 | 
						|
											if data.ShowVersionColumn {
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 50, "<th><a href=\"#\" onclick=\"sortTable('version')\" class=\"text-decoration-none text-dark\">Version")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = getSortIcon("version", data.SortBy, data.SortOrder).Render(ctx, templ_7745c5c3_Buffer)
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 51, "</a></th>")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
											}
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 52, "<th>Actions</th></tr></thead> <tbody>")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											for _, volume := range data.Volumes {
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 53, "<tr><td><code class=\"volume-id-link\" style=\"cursor: pointer; text-decoration: underline; color: #0d6efd;\" data-volume-id=\"")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												var templ_7745c5c3_Var15 string
							 | 
						|
												templ_7745c5c3_Var15, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", volume.Id))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 317, Col: 94}
							 | 
						|
												}
							 | 
						|
												_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var15))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 54, "\" title=\"Click to view volume details\">")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												var templ_7745c5c3_Var16 string
							 | 
						|
												templ_7745c5c3_Var16, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", volume.Id))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 319, Col: 77}
							 | 
						|
												}
							 | 
						|
												_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var16))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, "</code></td><td><a href=\"")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												var templ_7745c5c3_Var17 templ.SafeURL
							 | 
						|
												templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(fmt.Sprintf("http://%s/ui/index.html", volume.Server)))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 323, Col: 121}
							 | 
						|
												}
							 | 
						|
												_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var17))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 56, "\" target=\"_blank\" class=\"text-decoration-none\">")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												var templ_7745c5c3_Var18 string
							 | 
						|
												templ_7745c5c3_Var18, templ_7745c5c3_Err = templ.JoinStringErrs(volume.Server)
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 324, Col: 62}
							 | 
						|
												}
							 | 
						|
												_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var18))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, " <i class=\"fas fa-external-link-alt ms-1 text-muted\"></i></a></td>")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												if data.ShowDataCenterColumn {
							 | 
						|
													templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "<td><span class=\"badge bg-light text-dark\">")
							 | 
						|
													if templ_7745c5c3_Err != nil {
							 | 
						|
														return templ_7745c5c3_Err
							 | 
						|
													}
							 | 
						|
													var templ_7745c5c3_Var19 string
							 | 
						|
													templ_7745c5c3_Var19, templ_7745c5c3_Err = templ.JoinStringErrs(volume.DataCenter)
							 | 
						|
													if templ_7745c5c3_Err != nil {
							 | 
						|
														return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 330, Col: 105}
							 | 
						|
													}
							 | 
						|
													_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var19))
							 | 
						|
													if templ_7745c5c3_Err != nil {
							 | 
						|
														return templ_7745c5c3_Err
							 | 
						|
													}
							 | 
						|
													templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, "</span></td>")
							 | 
						|
													if templ_7745c5c3_Err != nil {
							 | 
						|
														return templ_7745c5c3_Err
							 | 
						|
													}
							 | 
						|
												}
							 | 
						|
												if data.ShowRackColumn {
							 | 
						|
													templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, "<td><span class=\"badge bg-light text-dark\">")
							 | 
						|
													if templ_7745c5c3_Err != nil {
							 | 
						|
														return templ_7745c5c3_Err
							 | 
						|
													}
							 | 
						|
													var templ_7745c5c3_Var20 string
							 | 
						|
													templ_7745c5c3_Var20, templ_7745c5c3_Err = templ.JoinStringErrs(volume.Rack)
							 | 
						|
													if templ_7745c5c3_Err != nil {
							 | 
						|
														return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 335, Col: 99}
							 | 
						|
													}
							 | 
						|
													_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var20))
							 | 
						|
													if templ_7745c5c3_Err != nil {
							 | 
						|
														return templ_7745c5c3_Err
							 | 
						|
													}
							 | 
						|
													templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "</span></td>")
							 | 
						|
													if templ_7745c5c3_Err != nil {
							 | 
						|
														return templ_7745c5c3_Err
							 | 
						|
													}
							 | 
						|
												}
							 | 
						|
												if data.ShowCollectionColumn {
							 | 
						|
													templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, "<td>")
							 | 
						|
													if templ_7745c5c3_Err != nil {
							 | 
						|
														return templ_7745c5c3_Err
							 | 
						|
													}
							 | 
						|
													if volume.Collection == "" {
							 | 
						|
														templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 63, "<a href=\"")
							 | 
						|
														if templ_7745c5c3_Err != nil {
							 | 
						|
															return templ_7745c5c3_Err
							 | 
						|
														}
							 | 
						|
														var templ_7745c5c3_Var21 templ.SafeURL
							 | 
						|
														templ_7745c5c3_Var21, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL("/cluster/volumes?collection=default"))
							 | 
						|
														if templ_7745c5c3_Err != nil {
							 | 
						|
															return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 341, Col: 113}
							 | 
						|
														}
							 | 
						|
														_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var21))
							 | 
						|
														if templ_7745c5c3_Err != nil {
							 | 
						|
															return templ_7745c5c3_Err
							 | 
						|
														}
							 | 
						|
														templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, "\" class=\"text-decoration-none\"><span class=\"badge bg-secondary\">default</span></a>")
							 | 
						|
														if templ_7745c5c3_Err != nil {
							 | 
						|
															return templ_7745c5c3_Err
							 | 
						|
														}
							 | 
						|
													} else {
							 | 
						|
														templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 65, "<a href=\"")
							 | 
						|
														if templ_7745c5c3_Err != nil {
							 | 
						|
															return templ_7745c5c3_Err
							 | 
						|
														}
							 | 
						|
														var templ_7745c5c3_Var22 templ.SafeURL
							 | 
						|
														templ_7745c5c3_Var22, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(fmt.Sprintf("/cluster/volumes?collection=%s", volume.Collection)))
							 | 
						|
														if templ_7745c5c3_Err != nil {
							 | 
						|
															return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 345, Col: 140}
							 | 
						|
														}
							 | 
						|
														_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var22))
							 | 
						|
														if templ_7745c5c3_Err != nil {
							 | 
						|
															return templ_7745c5c3_Err
							 | 
						|
														}
							 | 
						|
														templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 66, "\" class=\"text-decoration-none\"><span class=\"badge bg-secondary\">")
							 | 
						|
														if templ_7745c5c3_Err != nil {
							 | 
						|
															return templ_7745c5c3_Err
							 | 
						|
														}
							 | 
						|
														var templ_7745c5c3_Var23 string
							 | 
						|
														templ_7745c5c3_Var23, templ_7745c5c3_Err = templ.JoinStringErrs(volume.Collection)
							 | 
						|
														if templ_7745c5c3_Err != nil {
							 | 
						|
															return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 346, Col: 107}
							 | 
						|
														}
							 | 
						|
														_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var23))
							 | 
						|
														if templ_7745c5c3_Err != nil {
							 | 
						|
															return templ_7745c5c3_Err
							 | 
						|
														}
							 | 
						|
														templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 67, "</span></a>")
							 | 
						|
														if templ_7745c5c3_Err != nil {
							 | 
						|
															return templ_7745c5c3_Err
							 | 
						|
														}
							 | 
						|
													}
							 | 
						|
													templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 68, "</td>")
							 | 
						|
													if templ_7745c5c3_Err != nil {
							 | 
						|
														return templ_7745c5c3_Err
							 | 
						|
													}
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 69, "<td>")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												var templ_7745c5c3_Var24 string
							 | 
						|
												templ_7745c5c3_Var24, templ_7745c5c3_Err = templ.JoinStringErrs(formatBytes(int64(volume.Size)))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 351, Col: 100}
							 | 
						|
												}
							 | 
						|
												_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var24))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, "</td><td><div class=\"d-flex align-items-center\"><div class=\"progress me-2\" style=\"width: 80px; height: 16px; background-color: #e9ecef;\"><!-- Active data (green) --><div class=\"progress-bar bg-success\" role=\"progressbar\" style=\"")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												var templ_7745c5c3_Var25 string
							 | 
						|
												templ_7745c5c3_Var25, templ_7745c5c3_Err = templruntime.SanitizeStyleAttributeValues(fmt.Sprintf("width: %.1f%%",
							 | 
						|
													func() float64 {
							 | 
						|
														if volume.Size > 0 {
							 | 
						|
															activePct := float64(volume.Size-volume.DeletedByteCount) / float64(volume.Size) * 100
							 | 
						|
															if data.VolumeSizeLimit > 0 {
							 | 
						|
																return activePct * float64(volume.Size) / float64(data.VolumeSizeLimit) * 100
							 | 
						|
															}
							 | 
						|
															return activePct
							 | 
						|
														}
							 | 
						|
														return 0
							 | 
						|
													}()))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 367, Col: 49}
							 | 
						|
												}
							 | 
						|
												_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var25))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 71, "\" title=\"")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												var templ_7745c5c3_Var26 string
							 | 
						|
												templ_7745c5c3_Var26, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("Active: %s", formatBytes(int64(volume.Size-volume.DeletedByteCount))))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 368, Col: 132}
							 | 
						|
												}
							 | 
						|
												_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var26))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, "\"></div><!-- Garbage data (red) --><div class=\"progress-bar bg-danger\" role=\"progressbar\" style=\"")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												var templ_7745c5c3_Var27 string
							 | 
						|
												templ_7745c5c3_Var27, templ_7745c5c3_Err = templruntime.SanitizeStyleAttributeValues(fmt.Sprintf("width: %.1f%%",
							 | 
						|
													func() float64 {
							 | 
						|
														if volume.Size > 0 && volume.DeletedByteCount > 0 {
							 | 
						|
															garbagePct := float64(volume.DeletedByteCount) / float64(volume.Size) * 100
							 | 
						|
															if data.VolumeSizeLimit > 0 {
							 | 
						|
																return garbagePct * float64(volume.Size) / float64(data.VolumeSizeLimit) * 100
							 | 
						|
															}
							 | 
						|
															return garbagePct
							 | 
						|
														}
							 | 
						|
														return 0
							 | 
						|
													}()))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 382, Col: 49}
							 | 
						|
												}
							 | 
						|
												_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var27))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 73, "\" title=\"")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												var templ_7745c5c3_Var28 string
							 | 
						|
												templ_7745c5c3_Var28, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("Garbage: %s", formatBytes(int64(volume.DeletedByteCount))))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 383, Col: 119}
							 | 
						|
												}
							 | 
						|
												_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var28))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 74, "\"></div></div><small class=\"text-muted\">")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												var templ_7745c5c3_Var29 string
							 | 
						|
												templ_7745c5c3_Var29, templ_7745c5c3_Err = templ.JoinStringErrs(func() string {
							 | 
						|
													if data.VolumeSizeLimit > 0 {
							 | 
						|
														return fmt.Sprintf("%.0f%%", float64(volume.Size)/float64(data.VolumeSizeLimit)*100)
							 | 
						|
													}
							 | 
						|
													return "N/A"
							 | 
						|
												}())
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 392, Col: 39}
							 | 
						|
												}
							 | 
						|
												_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var29))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 75, "</small></div></td><td>")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												var templ_7745c5c3_Var30 string
							 | 
						|
												templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", volume.FileCount))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 396, Col: 64}
							 | 
						|
												}
							 | 
						|
												_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 76, "</td><td><span class=\"badge bg-info\">")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												var templ_7745c5c3_Var31 string
							 | 
						|
												templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%03d", volume.ReplicaPlacement))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 398, Col: 101}
							 | 
						|
												}
							 | 
						|
												_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var31))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 77, "</span></td>")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												if data.ShowDiskTypeColumn {
							 | 
						|
													templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 78, "<td><span class=\"badge bg-primary\">")
							 | 
						|
													if templ_7745c5c3_Err != nil {
							 | 
						|
														return templ_7745c5c3_Err
							 | 
						|
													}
							 | 
						|
													var templ_7745c5c3_Var32 string
							 | 
						|
													templ_7745c5c3_Var32, templ_7745c5c3_Err = templ.JoinStringErrs(volume.DiskType)
							 | 
						|
													if templ_7745c5c3_Err != nil {
							 | 
						|
														return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 402, Col: 95}
							 | 
						|
													}
							 | 
						|
													_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var32))
							 | 
						|
													if templ_7745c5c3_Err != nil {
							 | 
						|
														return templ_7745c5c3_Err
							 | 
						|
													}
							 | 
						|
													templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 79, "</span></td>")
							 | 
						|
													if templ_7745c5c3_Err != nil {
							 | 
						|
														return templ_7745c5c3_Err
							 | 
						|
													}
							 | 
						|
												}
							 | 
						|
												if data.ShowVersionColumn {
							 | 
						|
													templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 80, "<td><span class=\"badge bg-dark\">")
							 | 
						|
													if templ_7745c5c3_Err != nil {
							 | 
						|
														return templ_7745c5c3_Err
							 | 
						|
													}
							 | 
						|
													var templ_7745c5c3_Var33 string
							 | 
						|
													templ_7745c5c3_Var33, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("v%d", volume.Version))
							 | 
						|
													if templ_7745c5c3_Err != nil {
							 | 
						|
														return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 407, Col: 111}
							 | 
						|
													}
							 | 
						|
													_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var33))
							 | 
						|
													if templ_7745c5c3_Err != nil {
							 | 
						|
														return templ_7745c5c3_Err
							 | 
						|
													}
							 | 
						|
													templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 81, "</span></td>")
							 | 
						|
													if templ_7745c5c3_Err != nil {
							 | 
						|
														return templ_7745c5c3_Err
							 | 
						|
													}
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 82, "<td><div class=\"btn-group btn-group-sm\"><button type=\"button\" class=\"btn btn-outline-primary btn-sm view-details-btn\" title=\"View Details\" data-volume-id=\"")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												var templ_7745c5c3_Var34 string
							 | 
						|
												templ_7745c5c3_Var34, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", volume.Id))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 413, Col: 121}
							 | 
						|
												}
							 | 
						|
												_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var34))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 83, "\"><i class=\"fas fa-eye\"></i></button> <button type=\"button\" class=\"btn btn-outline-secondary btn-sm vacuum-btn\" title=\"Vacuum\" data-volume-id=\"")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												var templ_7745c5c3_Var35 string
							 | 
						|
												templ_7745c5c3_Var35, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", volume.Id))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 418, Col: 100}
							 | 
						|
												}
							 | 
						|
												_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var35))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 84, "\" data-server=\"")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												var templ_7745c5c3_Var36 string
							 | 
						|
												templ_7745c5c3_Var36, templ_7745c5c3_Err = templ.JoinStringErrs(volume.Server)
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 419, Col: 82}
							 | 
						|
												}
							 | 
						|
												_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var36))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 85, "\"><i class=\"fas fa-compress-alt\"></i></button></div></td></tr>")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
											}
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 86, "</tbody></table></div><!-- Volume Summary --> <div class=\"d-flex justify-content-between align-items-center mt-3\"><div><small class=\"text-muted\">Showing ")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											var templ_7745c5c3_Var37 string
							 | 
						|
											templ_7745c5c3_Var37, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", (data.CurrentPage-1)*data.PageSize+1))
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 434, Col: 98}
							 | 
						|
											}
							 | 
						|
											_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var37))
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 87, " to ")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											var templ_7745c5c3_Var38 string
							 | 
						|
											templ_7745c5c3_Var38, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", minInt(data.CurrentPage*data.PageSize, data.TotalVolumes)))
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 434, Col: 180}
							 | 
						|
											}
							 | 
						|
											_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var38))
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 88, " of ")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											var templ_7745c5c3_Var39 string
							 | 
						|
											templ_7745c5c3_Var39, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", data.TotalVolumes))
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 434, Col: 222}
							 | 
						|
											}
							 | 
						|
											_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var39))
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 89, " volumes</small></div>")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											if data.TotalPages > 1 {
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 90, "<div><small class=\"text-muted\">Page ")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												var templ_7745c5c3_Var40 string
							 | 
						|
												templ_7745c5c3_Var40, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", data.CurrentPage))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 440, Col: 77}
							 | 
						|
												}
							 | 
						|
												_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var40))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 91, " of ")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												var templ_7745c5c3_Var41 string
							 | 
						|
												templ_7745c5c3_Var41, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", data.TotalPages))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 440, Col: 117}
							 | 
						|
												}
							 | 
						|
												_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var41))
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 92, "</small></div>")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
											}
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 93, "</div><!-- Pagination Controls --> ")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
											if data.TotalPages > 1 {
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 94, "<div class=\"d-flex justify-content-center mt-3\"><nav aria-label=\"Volumes pagination\"><ul class=\"pagination pagination-sm mb-0\"><!-- Previous Button -->")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												if data.CurrentPage > 1 {
							 | 
						|
													templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 95, "<li class=\"page-item\"><a class=\"page-link pagination-link\" href=\"#\" data-page=\"")
							 | 
						|
													if templ_7745c5c3_Err != nil {
							 | 
						|
														return templ_7745c5c3_Err
							 | 
						|
													}
							 | 
						|
													var templ_7745c5c3_Var42 string
							 | 
						|
													templ_7745c5c3_Var42, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", data.CurrentPage-1))
							 | 
						|
													if templ_7745c5c3_Err != nil {
							 | 
						|
														return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 454, Col: 138}
							 | 
						|
													}
							 | 
						|
													_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var42))
							 | 
						|
													if templ_7745c5c3_Err != nil {
							 | 
						|
														return templ_7745c5c3_Err
							 | 
						|
													}
							 | 
						|
													templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 96, "\"><i class=\"fas fa-chevron-left\"></i></a></li>")
							 | 
						|
													if templ_7745c5c3_Err != nil {
							 | 
						|
														return templ_7745c5c3_Err
							 | 
						|
													}
							 | 
						|
												} else {
							 | 
						|
													templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 97, "<li class=\"page-item disabled\"><span class=\"page-link\"><i class=\"fas fa-chevron-left\"></i></span></li>")
							 | 
						|
													if templ_7745c5c3_Err != nil {
							 | 
						|
														return templ_7745c5c3_Err
							 | 
						|
													}
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 98, "<!-- Page Numbers -->")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												for i := maxInt(1, data.CurrentPage-2); i <= minInt(data.TotalPages, data.CurrentPage+2); i++ {
							 | 
						|
													if i == data.CurrentPage {
							 | 
						|
														templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 99, "<li class=\"page-item active\"><span class=\"page-link\">")
							 | 
						|
														if templ_7745c5c3_Err != nil {
							 | 
						|
															return templ_7745c5c3_Err
							 | 
						|
														}
							 | 
						|
														var templ_7745c5c3_Var43 string
							 | 
						|
														templ_7745c5c3_Var43, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", i))
							 | 
						|
														if templ_7745c5c3_Err != nil {
							 | 
						|
															return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 470, Col: 93}
							 | 
						|
														}
							 | 
						|
														_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var43))
							 | 
						|
														if templ_7745c5c3_Err != nil {
							 | 
						|
															return templ_7745c5c3_Err
							 | 
						|
														}
							 | 
						|
														templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 100, "</span></li>")
							 | 
						|
														if templ_7745c5c3_Err != nil {
							 | 
						|
															return templ_7745c5c3_Err
							 | 
						|
														}
							 | 
						|
													} else {
							 | 
						|
														templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 101, "<li class=\"page-item\"><a class=\"page-link pagination-link\" href=\"#\" data-page=\"")
							 | 
						|
														if templ_7745c5c3_Err != nil {
							 | 
						|
															return templ_7745c5c3_Err
							 | 
						|
														}
							 | 
						|
														var templ_7745c5c3_Var44 string
							 | 
						|
														templ_7745c5c3_Var44, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", i))
							 | 
						|
														if templ_7745c5c3_Err != nil {
							 | 
						|
															return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 474, Col: 125}
							 | 
						|
														}
							 | 
						|
														_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var44))
							 | 
						|
														if templ_7745c5c3_Err != nil {
							 | 
						|
															return templ_7745c5c3_Err
							 | 
						|
														}
							 | 
						|
														templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 102, "\">")
							 | 
						|
														if templ_7745c5c3_Err != nil {
							 | 
						|
															return templ_7745c5c3_Err
							 | 
						|
														}
							 | 
						|
														var templ_7745c5c3_Var45 string
							 | 
						|
														templ_7745c5c3_Var45, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", i))
							 | 
						|
														if templ_7745c5c3_Err != nil {
							 | 
						|
															return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 474, Col: 148}
							 | 
						|
														}
							 | 
						|
														_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var45))
							 | 
						|
														if templ_7745c5c3_Err != nil {
							 | 
						|
															return templ_7745c5c3_Err
							 | 
						|
														}
							 | 
						|
														templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 103, "</a></li>")
							 | 
						|
														if templ_7745c5c3_Err != nil {
							 | 
						|
															return templ_7745c5c3_Err
							 | 
						|
														}
							 | 
						|
													}
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 104, "<!-- Next Button -->")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
												if data.CurrentPage < data.TotalPages {
							 | 
						|
													templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 105, "<li class=\"page-item\"><a class=\"page-link pagination-link\" href=\"#\" data-page=\"")
							 | 
						|
													if templ_7745c5c3_Err != nil {
							 | 
						|
														return templ_7745c5c3_Err
							 | 
						|
													}
							 | 
						|
													var templ_7745c5c3_Var46 string
							 | 
						|
													templ_7745c5c3_Var46, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", data.CurrentPage+1))
							 | 
						|
													if templ_7745c5c3_Err != nil {
							 | 
						|
														return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 482, Col: 138}
							 | 
						|
													}
							 | 
						|
													_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var46))
							 | 
						|
													if templ_7745c5c3_Err != nil {
							 | 
						|
														return templ_7745c5c3_Err
							 | 
						|
													}
							 | 
						|
													templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 106, "\"><i class=\"fas fa-chevron-right\"></i></a></li>")
							 | 
						|
													if templ_7745c5c3_Err != nil {
							 | 
						|
														return templ_7745c5c3_Err
							 | 
						|
													}
							 | 
						|
												} else {
							 | 
						|
													templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 107, "<li class=\"page-item disabled\"><span class=\"page-link\"><i class=\"fas fa-chevron-right\"></i></span></li>")
							 | 
						|
													if templ_7745c5c3_Err != nil {
							 | 
						|
														return templ_7745c5c3_Err
							 | 
						|
													}
							 | 
						|
												}
							 | 
						|
												templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 108, "</ul></nav></div>")
							 | 
						|
												if templ_7745c5c3_Err != nil {
							 | 
						|
													return templ_7745c5c3_Err
							 | 
						|
												}
							 | 
						|
											}
							 | 
						|
										} else {
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 109, "<div class=\"text-center py-5\"><i class=\"fas fa-database fa-3x text-muted mb-3\"></i><h5 class=\"text-muted\">No Volumes Found</h5><p class=\"text-muted\">No volumes are currently available in the cluster.</p></div>")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
										templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 110, "</div></div><!-- Last Updated --><div class=\"row\"><div class=\"col-12\"><small class=\"text-muted\"><i class=\"fas fa-clock me-1\"></i> Last updated: ")
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										var templ_7745c5c3_Var47 string
							 | 
						|
										templ_7745c5c3_Var47, templ_7745c5c3_Err = templ.JoinStringErrs(data.LastUpdated.Format("2006-01-02 15:04:05"))
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_volumes.templ`, Line: 512, Col: 81}
							 | 
						|
										}
							 | 
						|
										_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var47))
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 111, "</small></div></div></div><!-- JavaScript for pagination and sorting --><script>\n        // Initialize pagination links when page loads\n        document.addEventListener('DOMContentLoaded', function() {\n            // Add click handlers to pagination links\n            document.querySelectorAll('.pagination-link').forEach(link => {\n                link.addEventListener('click', function(e) {\n                    e.preventDefault();\n                    const page = this.getAttribute('data-page');\n                    goToPage(page);\n                });\n            });\n            \n            // Add click handlers to view details buttons\n            document.querySelectorAll('.view-details-btn').forEach(button => {\n                button.addEventListener('click', function(e) {\n                    e.preventDefault();\n                    const volumeId = this.getAttribute('data-volume-id');\n                    viewVolumeDetails(volumeId);\n                });\n            });\n\n            // Add click handlers to volume ID links\n            document.querySelectorAll('.volume-id-link').forEach(link => {\n                link.addEventListener('click', function(e) {\n                    e.preventDefault();\n                    const volumeId = this.getAttribute('data-volume-id');\n                    viewVolumeDetails(volumeId);\n                });\n            });\n\n            // Add click handlers to vacuum buttons\n            document.querySelectorAll('.vacuum-btn').forEach(button => {\n                button.addEventListener('click', function(e) {\n                    e.preventDefault();\n                    const volumeId = this.getAttribute('data-volume-id');\n                    const server = this.getAttribute('data-server');\n                    performVacuum(volumeId, server, this);\n                });\n            });\n        });\n        \n        function goToPage(page) {\n            const url = new URL(window.location);\n            url.searchParams.set('page', page);\n            window.location.href = url.toString();\n        }\n        \n        function changePageSize() {\n            const pageSize = document.getElementById('pageSizeSelect').value;\n            const url = new URL(window.location);\n            url.searchParams.set('pageSize', pageSize);\n            url.searchParams.set('page', '1'); // Reset to first page\n            window.location.href = url.toString();\n        }\n        \n        function sortTable(column) {\n            const url = new URL(window.location);\n            const currentSort = url.searchParams.get('sortBy');\n            const currentOrder = url.searchParams.get('sortOrder') || 'asc';\n            \n            let newOrder = 'asc';\n            if (currentSort === column && currentOrder === 'asc') {\n                newOrder = 'desc';\n            }\n            \n            url.searchParams.set('sortBy', column);\n            url.searchParams.set('sortOrder', newOrder);\n            url.searchParams.set('page', '1'); // Reset to first page\n            window.location.href = url.toString();\n        }\n        \n        function exportVolumes() {\n            // TODO: Implement volume export functionality\n            alert('Export functionality to be implemented');\n        }\n        \n        function viewVolumeDetails(volumeId) {\n            // Get the server from the current row - works for both buttons and volume ID links\n            const clickedElement = event.target;\n            const row = clickedElement.closest('tr');\n            const serverCell = row.querySelector('td:nth-child(2) a');\n            const server = serverCell ? serverCell.textContent.trim() : 'unknown';\n            \n            window.location.href = `/cluster/volumes/${volumeId}/${encodeURIComponent(server)}`;\n        }\n\n        function performVacuum(volumeId, server, button) {\n            // Disable button and show loading state\n            const originalHTML = button.innerHTML;\n            button.disabled = true;\n            button.innerHTML = '<i class=\"fas fa-spinner fa-spin\"></i>';\n\n            // Send vacuum request\n            fetch(`/api/volumes/${volumeId}/${encodeURIComponent(server)}/vacuum`, {\n                method: 'POST',\n                headers: {\n                    'Content-Type': 'application/json',\n                }\n            })\n            .then(response => response.json())\n            .then(data => {\n                if (data.error) {\n                    showMessage(data.error, 'error');\n                } else {\n                    showMessage(data.message || 'Volume vacuum started successfully', 'success');\n                    // Optionally refresh the page after a delay to show updated vacuum status\n                    setTimeout(() => {\n                        window.location.reload();\n                    }, 2000);\n                }\n            })\n            .catch(error => {\n                console.error('Error:', error);\n                showMessage('Failed to start vacuum operation', 'error');\n            })\n            .finally(() => {\n                // Re-enable button\n                button.disabled = false;\n                button.innerHTML = originalHTML;\n            });\n        }\n\n        function showMessage(message, type) {\n            // Create toast notification\n            const toast = document.createElement('div');\n            toast.className = `alert alert-${type === 'error' ? 'danger' : 'success'} alert-dismissible fade show position-fixed`;\n            toast.style.top = '20px';\n            toast.style.right = '20px';\n            toast.style.zIndex = '9999';\n            toast.style.minWidth = '300px';\n            \n            toast.innerHTML = `\n                ${message}\n                <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"alert\"></button>\n            `;\n            \n            document.body.appendChild(toast);\n            \n            // Auto-remove after 5 seconds\n            setTimeout(() => {\n                if (toast.parentNode) {\n                    toast.parentNode.removeChild(toast);\n                }\n            }, 5000);\n        }\n    </script>")
							 | 
						|
										if templ_7745c5c3_Err != nil {
							 | 
						|
											return templ_7745c5c3_Err
							 | 
						|
										}
							 | 
						|
										return nil
							 | 
						|
									})
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								func countActiveVolumes(volumes []dash.VolumeWithTopology) int {
							 | 
						|
									// Since we removed status tracking, consider all volumes as active
							 | 
						|
									return len(volumes)
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								func countUniqueDataCenters(volumes []dash.VolumeWithTopology) int {
							 | 
						|
									dcMap := make(map[string]bool)
							 | 
						|
									for _, volume := range volumes {
							 | 
						|
										dcMap[volume.DataCenter] = true
							 | 
						|
									}
							 | 
						|
									return len(dcMap)
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								func countUniqueRacks(volumes []dash.VolumeWithTopology) int {
							 | 
						|
									rackMap := make(map[string]bool)
							 | 
						|
									for _, volume := range volumes {
							 | 
						|
										if volume.Rack != "" {
							 | 
						|
											rackMap[volume.Rack] = true
							 | 
						|
										}
							 | 
						|
									}
							 | 
						|
									return len(rackMap)
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								func countUniqueDiskTypes(volumes []dash.VolumeWithTopology) int {
							 | 
						|
									diskTypeMap := make(map[string]bool)
							 | 
						|
									for _, volume := range volumes {
							 | 
						|
										diskType := volume.DiskType
							 | 
						|
										if diskType == "" {
							 | 
						|
											diskType = "hdd"
							 | 
						|
										}
							 | 
						|
										diskTypeMap[diskType] = true
							 | 
						|
									}
							 | 
						|
									return len(diskTypeMap)
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								func getSortIcon(column, currentSort, currentOrder string) templ.Component {
							 | 
						|
									return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
							 | 
						|
										templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
							 | 
						|
										if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
							 | 
						|
											return templ_7745c5c3_CtxErr
							 | 
						|
										}
							 | 
						|
										templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
							 | 
						|
										if !templ_7745c5c3_IsBuffer {
							 | 
						|
											defer func() {
							 | 
						|
												templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
							 | 
						|
												if templ_7745c5c3_Err == nil {
							 | 
						|
													templ_7745c5c3_Err = templ_7745c5c3_BufErr
							 | 
						|
												}
							 | 
						|
											}()
							 | 
						|
										}
							 | 
						|
										ctx = templ.InitializeContext(ctx)
							 | 
						|
										templ_7745c5c3_Var48 := templ.GetChildren(ctx)
							 | 
						|
										if templ_7745c5c3_Var48 == nil {
							 | 
						|
											templ_7745c5c3_Var48 = templ.NopComponent
							 | 
						|
										}
							 | 
						|
										ctx = templ.ClearChildren(ctx)
							 | 
						|
										if column != currentSort {
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 112, "<i class=\"fas fa-sort text-muted ms-1\"></i>")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										} else if currentOrder == "asc" {
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 113, "<i class=\"fas fa-sort-up text-primary ms-1\"></i>")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										} else {
							 | 
						|
											templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 114, "<i class=\"fas fa-sort-down text-primary ms-1\"></i>")
							 | 
						|
											if templ_7745c5c3_Err != nil {
							 | 
						|
												return templ_7745c5c3_Err
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
										return nil
							 | 
						|
									})
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								func minInt(a, b int) int {
							 | 
						|
									if a < b {
							 | 
						|
										return a
							 | 
						|
									}
							 | 
						|
									return b
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								func maxInt(a, b int) int {
							 | 
						|
									if a > b {
							 | 
						|
										return a
							 | 
						|
									}
							 | 
						|
									return b
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								var _ = templruntime.GeneratedTemplate
							 |