/
snap
/
lxd
/
current
/
share
/
lxd-ui
/
assets
/
File Upload :
llllll
Current File: //snap/lxd/current/share/lxd-ui/assets/StorageVolumes-CcJKxXiW.js
import{c as le,x as re,ak as ie,al as ce,j as e,d as i,bS as E,A as ue,t as Y,L as me,bT as de,F as ee,m as pe,l as he,r as P,ah as b,aj as ge,q as $,n as ye,o as fe,aS as be,bU as X,D as je,bV as Z,bW as xe,bX as Se,br as Ne,R as q,e as Ce}from"./index-dL2n30-Z.js";import{S as we}from"./ScrollableTable-CQDmfMtz.js";import{C as Le,a as Te,V as Ve,P as ve,Q as ke,S as Ee}from"./StorageVolumesFilter-Ce3Ysqc8.js";import{V as Pe,S as Ie}from"./VolumeAddSnapshotBtn-DcXN7aNE.js";import{u as _e}from"./useInstances-1KVpwndK.js";import{D as Be,u as De}from"./DeleteStorageVolumeBtn-BooO3e9W.js";import{i as Oe}from"./snapshots-AS6hXv2C.js";import{u as $e}from"./useSortTableData-8PACcjA7.js";import{P as k}from"./PageHeader-5dI4zJHr.js";import{H as Me}from"./HelpLink-C3KAssP1.js";import{b as Re}from"./useVolumes-DkjZCOr_.js";import{S as Ae}from"./SelectableMainTable-DeGTWeiA.js";import{S as Ke}from"./SelectedTableNotification-BHmDbErh.js";import{B as Fe}from"./BulkDeleteButton-DzyTAjHk.js";import{d as Ue}from"./storage-volumes-DY5ibnP4.js";import"./searchAndFilter-B29FrImZ.js";import"./SnapshotForm-DR60de46.js";import"./VolumeLinkChip-BdiZokmn.js";import"./instances-DpqZE1nw.js";import"./images-BNK9xDRN.js";const G=({projectName:s,className:d,defaultPool:c})=>{const a=le(),o=re(),{canCreateStorageVolumes:y}=ie(),{data:p}=ce(s),S=()=>{a(`/ui/project/${encodeURIComponent(s)}/storage/volumes/create${c?`?pool=${encodeURIComponent(c)}`:""}`)};return e.jsxs(i.Button,{appearance:"positive",hasIcon:!o,onClick:S,className:d,disabled:!y(p),title:y(p)?"Create volume":"You do not have permission to create volumes in this project",children:[!o&&e.jsx(i.Icon,{name:"plus",light:!0}),e.jsx("span",{children:"Create volume"})]})},I="Name",_="Pool",B="Cluster Member",w="Type",j="Content Type",D="Size",L="Used By",x="Snapshots",M="Actions",r={[I]:"10rem",[_]:"6rem",[B]:"10rem",[w]:"6rem",[j]:"6rem",[D]:"5rem",[L]:"5rem",[x]:"6rem",[M]:"8rem"},J=({volume:s,overrideName:d,className:c})=>{const a=!E(s),o=s.type==="container"||s.type==="virtual-machine",{data:y=[]}=_e(s.project),p=o&&y.find(u=>u.name===s.name),S=s.type==="image",{data:l=[]}=ue(s.project),m=S&&l.find(u=>u.fingerprint===s.name),h=s.type==="custom",N=p||m||h,n=d||s.name;return d&&!N?null:e.jsx("div",{className:Y("u-flex",c),children:e.jsx("div",{className:Y("u-truncate","volume-name-link"),title:n,children:N?e.jsxs(me,{to:de(s),className:a?"has-icon":void 0,children:[n,a&&e.jsx(i.Icon,{name:i.ICONS.externalLink})]}):n})})},qe=({volume:s,className:d})=>{const c=i.useToastNotification(),{project:a}=ee();return e.jsx(i.List,{inline:!0,className:Y(d,"actions-list"),items:[e.jsx(Pe,{volume:s,isCTA:!0,isDisabled:Oe(a)},"add-snapshot"),e.jsx(Be,{volume:s,project:(a==null?void 0:a.name)??"",onFinish:()=>{c.success(e.jsxs(e.Fragment,{children:["Storage volume"," ",e.jsx(pe,{bold:!0,type:"volume",value:s.name})," ","deleted."]}))}},"delete")]})},Ye=({volumes:s,onStart:d,onFinish:c})=>{const a=i.useToastNotification(),o=he(),[y,p]=P.useState(!1),{canDeleteVolume:S}=De(),{project:l}=ee(),m=(l==null?void 0:l.name)||"",h=s.filter(f=>S(f)),N=s.length,n=h.length,u=`Delete ${s.length} ${b("volume",s.length)}`,T=()=>{p(!0),d();const f=`${h.length} ${b("volume",h.length)} successfully deleted`;Ue(h,m).then(V=>{const{fulfilledCount:C,rejectedCount:v}=ge(V);C===n?a.success(f):v===n?a.failure("Volume bulk deletion failed",void 0,e.jsxs(e.Fragment,{children:[e.jsx("b",{children:n})," ",b("volume",n)," could not be deleted."]})):a.failure("Volume bulk deletion partially failed",void 0,e.jsxs(e.Fragment,{children:[e.jsx("b",{children:C})," ",b("volume",C)," ","deleted.",e.jsx("br",{}),e.jsx("b",{children:v})," ",b("volume",v)," could not be deleted."]})),o.invalidateQueries({queryKey:[$.volumes,m]}),o.invalidateQueries({queryKey:[$.isoVolumes]}),o.invalidateQueries({queryKey:[$.projects,l]}),o.invalidateQueries({predicate:A=>A.queryKey[0]===$.volumes}),p(!1),c()}).catch(V=>{p(!1),a.failure("Volume bulk deletion failed",V)})},R=()=>{if(n===N)return;const f=N-n;return[`${n} ${b("volume",n)} will be deleted.`,`${f} ${b("volume",f)} that you do not have permission to delete will be ignored.`]};return e.jsx(Fe,{entities:s,deletableEntities:h,entityType:"volume",onDelete:T,disabledReason:n===0?`You do not have permission to delete the selected ${b("volume",s.length)}`:void 0,confirmationButtonProps:{disabled:y||n===0,loading:y},buttonLabel:u,bulkDeleteBreakdown:R(),className:"u-no-margin--bottom"})},dt=()=>{const s=ye(),d=i.useNotify(),{project:c}=fe(),[a]=be(),[o,y]=P.useState(X()),p=je(),S=()=>{y(X())};i.useListener(window,S,"resize",!0);const l={queries:a.getAll(ke).map(t=>t.toLowerCase()),pools:a.getAll(ve),volumeTypes:a.getAll(Ve).map(t=>t==="VM"?"virtual-machine":t.toLowerCase()),contentTypes:a.getAll(Te).map(t=>t.toLowerCase()),clusterMembers:a.getAll(Le).map(t=>t.toLowerCase())};if(!c)return e.jsx(e.Fragment,{children:"Missing project"});const{data:m=[],error:h,isLoading:N}=Re(c),n=t=>`${t.name}-${t.pool}-${t.location||""}`,[u,T]=P.useState([]),[R,f]=P.useState([]);h&&d.failure("Loading storage volumes failed",h),P.useEffect(()=>{const t=new Set(m.map(n)),g=u.filter(O=>t.has(O));g.length!==u.length&&T(g)},[m]);const V=[{content:I,sortKey:"name",style:{width:r[I]}},{content:_,sortKey:"pool",style:{width:r[_]},className:"pool"},...p?[{content:B,sortKey:"clusterMember",style:{width:r[B]}}]:[],{content:o?e.jsxs(e.Fragment,{children:[w,e.jsx("br",{}),e.jsx("div",{className:"header-second-row",children:j})]}):w,sortKey:o?"contentType":"type",style:{width:r[o?j:w]}},...o?[]:[{content:j,sortKey:"contentType",style:{width:r[j]}}],{content:D,className:"u-align--right size",style:{width:r[D]}},{content:o?e.jsxs(e.Fragment,{children:[L,e.jsx("br",{}),e.jsx("div",{className:"header-second-row",children:x})]}):L,sortKey:o?"snapshots":"usedBy",className:"u-align--right used_by",style:{width:r[o?x:L]}},...o?[]:[{className:"u-align--right",content:x,sortKey:"snapshots",style:{width:r[x]}}],{content:"",className:"actions u-align--right","aria-label":"Actions",style:{width:r[M]}}],C=m.filter(t=>!(Z(t)||!l.queries.every(g=>t.name.toLowerCase().includes(g))||l.pools.length>0&&!l.pools.includes(t.pool)||l.volumeTypes.length>0&&!l.volumeTypes.includes(t.type)||l.contentTypes.length>0&&!l.contentTypes.includes(t.content_type)||l.clusterMembers.length>0&&!l.clusterMembers.includes(t.location.length===0?"cluster-wide":t.location))),v=xe(m),A=C.map(t=>{var Q,H,W;const g=n(t),O=Se(t),F=Ne(t),U=((Q=v[g])==null?void 0:Q.length)??0,ne=E(t);return{key:g,name:ne?g:void 0,className:"u-row",columns:[{content:e.jsx(J,{volume:t}),role:"rowheader",style:{width:r[I]},"aria-label":I},{content:e.jsx(q,{type:"pool",value:t.pool,to:`/ui/project/${encodeURIComponent(c)}/storage/pool/${encodeURIComponent(t.pool)}`}),role:"cell",className:"pool",style:{width:r[_]},"aria-label":_},...p?[{content:t.location?e.jsx(q,{type:"cluster-member",value:t.location,to:`/ui/cluster/member/${encodeURIComponent(t.location)}`}):e.jsx(q,{type:"cluster-group",value:"Cluster wide",to:"/ui/cluster/members"}),role:"cell",style:{width:r[B]},"aria-label":B}]:[],{content:e.jsxs(e.Fragment,{children:[O,o&&e.jsx("div",{className:"u-text--muted",children:F})]}),role:"cell","aria-label":w,style:{width:r[o?j:w]}},...o?[]:[{content:F,role:"cell","aria-label":j,style:{width:r[j]}}],{content:e.jsx(Ie,{volume:t}),role:"cell","aria-label":D,className:"u-align--right size",style:{width:r[D]}},{className:"u-align--right used_by",content:e.jsxs(e.Fragment,{children:[((H=t.used_by)==null?void 0:H.length)??0,o&&e.jsx("div",{className:"u-text--muted",children:U})]}),role:"cell","aria-label":L,style:{width:r[o?x:L]}},...o?[]:[{className:"u-align--right",content:U,role:"cell","aria-label":x,style:{width:r[x]}}],{className:"actions u-align--right",content:E(t)?e.jsx(qe,{volume:t,className:"storage-volume-actions u-no-margin--bottom"}):e.jsx(J,{volume:t,overrideName:`go to ${t.type==="image"?"images list":t.content_type==="iso"?"custom ISOs":"instance"}`,className:"storage-volume-actions u-align--right"}),role:"cell","aria-label":M,style:{width:r[M]}}],sortData:{name:t.name,pool:t.pool,clusterMember:t.location,contentType:F,type:O,usedBy:((W=t.used_by)==null?void 0:W.length)??0,snapshots:U}}}),{rows:z,updateSort:te}=$e({rows:A});if(N)return e.jsx(i.Spinner,{className:"u-loader",text:"Loading...",isMainComponent:!0});const se=l.pools.length===1?l.pools[0]:"",K=m.length!==0,oe=K?e.jsx("div",{className:"storage-volumes",children:e.jsx(we,{dependencies:[m],tableId:"volume-table",belowIds:["status-bar"],children:e.jsx(i.TablePagination,{data:z,id:"pagination",itemName:"volume",className:"u-no-margin--top","aria-label":"Table pagination control",description:u.length>0&&e.jsx(Ke,{totalCount:m.filter(t=>!Z(t)&&E(t)).length,itemName:"volume",parentName:"project",selectedNames:u,setSelectedNames:T,filteredNames:C.filter(E).map(n)}),children:e.jsx(Ae,{className:"storage-volume-table",id:"volume-table",headers:V,rows:z,sortable:!0,emptyStateMsg:"No volumes found matching this search",itemName:"volume",parentName:"project",selectedNames:u,setSelectedNames:T,disabledNames:R,filteredNames:C.map(n),onUpdateSort:te,defaultSortDirection:"descending"})})})}):e.jsxs(i.EmptyState,{className:"empty-state",image:e.jsx(i.Icon,{name:"switcher-dashboard",className:"empty-state-icon"}),title:"No volumes found in this project",children:[e.jsx("p",{children:"Storage volumes will appear here"}),e.jsx("p",{children:e.jsxs("a",{href:`${s}/explanation/storage/`,target:"_blank",rel:"noopener noreferrer",children:["Learn more about storage",e.jsx(i.Icon,{className:"external-link-icon",name:"external-link"})]})}),e.jsx(G,{projectName:c,className:"empty-state-button"})]}),ae=m.filter(t=>{const g=n(t);return u.includes(g)});return e.jsxs(i.CustomLayout,{mainClassName:"storage-volume-list",header:e.jsxs(k,{children:[e.jsxs(k.Left,{children:[e.jsx(k.Title,{children:e.jsx(Me,{href:`${s}/explanation/storage/`,title:"Learn more about storage pools, volumes and buckets",children:"Volumes"})}),!u.length&&K&&e.jsx(k.Search,{children:e.jsx(Ee,{volumes:m},c)}),!!u.length&&e.jsx(Ye,{volumes:ae,onStart:()=>{f(u)},onFinish:()=>{f([])}})]}),K&&e.jsx(k.BaseActions,{children:e.jsx(G,{projectName:c,defaultPool:se,className:"u-float-right u-no-margin--bottom"})})]}),children:[e.jsx(Ce,{}),e.jsx(i.Row,{children:oe})]})};export{dt as default};
Copyright ©2k19 -
Hexid
|
Tex7ure