Your IP : 216.73.216.220


Current Path : /proc/thread-self/root/snap/lxd/current/share/lxd-ui/assets/
Upload File :
Current File : //proc/thread-self/root/snap/lxd/current/share/lxd-ui/assets/ClusterGroupList-D1etYREt.js

import{t as F,j as e,d as s,v as C,k as v,w as S,R as f,x as p,p as N,y as x,r as E,c as T,z as y}from"./index-BsQN_SZU.js";import{u as h,p as P}from"./usePanelParams-CNAJZsSX.js";import{u as M,a as B,d as L,c as I,b as H}from"./useClusterGroups-BmTnhLw-.js";import{S as R}from"./SelectableMainTable-DBx4rRiq.js";import{B as q}from"./BaseLayout-D3ZT4TU8.js";import{H as D}from"./HelpLink-BJF9zWZL.js";import{u as K}from"./useSortTableData-DkMx8bMp.js";import{P as V}from"./ProjectRichChip-DZzjTfq6.js";const G=({formik:t})=>{const{data:a=[]}=F(),i=t.values.bareGroup?.members??[],l=t.values.members.filter(r=>!i.includes(r)),d=i.filter(r=>!t.values.members.includes(r)),u=[...l,...d],n=new Set(t.values.bareGroup?.members??[]),m=a.sort((r,o)=>n.has(r.server_name)?-1:n.has(o.server_name)?1:0);return e.jsxs(s.Form,{onSubmit:t.handleSubmit,children:[e.jsx(s.Input,{type:"submit",hidden:!0,value:"Hidden input"}),!t.values.bareGroup&&e.jsx(s.Input,{...t.getFieldProps("name"),type:"text",label:"Name",placeholder:"Enter name",required:!0,autoFocus:!0,error:t.touched.name?t.errors.name:null}),e.jsx(s.Input,{...t.getFieldProps("description"),type:"text",label:"Description",placeholder:"Enter description"}),e.jsx("p",{className:"u-sv-1",children:"Cluster members"}),e.jsx(R,{itemName:"member",parentName:"cluster group",className:"member-selection-table",filteredNames:a?.map(r=>r.server_name)??[],selectedNames:t.values.members,hideContextualMenu:!0,setSelectedNames:(r,o)=>{if(o){t.setFieldValue("members",[]);return}t.setFieldValue("members",r)},disabledNames:[],headers:[{content:"Name",sortKey:"name",className:"name"},{content:"Groups",className:"groups u-align--right"},{content:"","aria-label":"Modified status",className:"modified-status"}],rows:m.map(r=>{const o=r.server_name,c=(r.groups??[]).length,b=()=>{t.values.members.includes(o)?t.setFieldValue("members",t.values.members.filter(g=>g!==o)):t.setFieldValue("members",[...t.values.members,o])},j=u.includes(o);return{key:o,name:o,columns:[{content:o,title:o,onClick:b,role:"rowheader",className:"name u-truncate clickable-cell","aria-label":"Name"},{content:c,onClick:b,role:"cell",className:"groups u-truncate clickable-cell u-align--right","aria-label":"groups"},{content:j&&e.jsx(s.Icon,{name:"status-in-progress-small","aria-label":l.includes(o)?"was added":"was removed"}),role:"cell","aria-label":"Modified status",className:"modified-status u-align--right"}]}})??[]})]})},Q=()=>{const t=h(),a=s.useNotify(),i=s.useToastNotification(),l=C(),{data:d}=M(t.group??""),u=()=>{t.clear(),a.clear()},n=v({initialValues:{name:d?.name??"",description:d?.description??"",members:d?.members??[],bareGroup:d},enableReinitialize:!0,onSubmit:m=>{const r={name:m.name,description:m.description,members:m.members};B(r).then(()=>{i.success(e.jsxs(e.Fragment,{children:["Cluster group"," ",e.jsx(S,{type:"cluster-group",value:m.name,to:`${f}/ui/cluster/groups`})," ","saved."]})),u()}).catch(o=>{a.failure("Cluster group update failed",o)}).finally(()=>{n.setSubmitting(!1),l.invalidateQueries({queryKey:[p.cluster,p.groups]}),l.invalidateQueries({queryKey:[p.cluster,p.groups,m.name]})})}});return e.jsxs(s.SidePanel,{children:[e.jsx(s.SidePanel.Header,{children:e.jsxs(s.SidePanel.HeaderTitle,{children:["Edit cluster group ",t.group]})}),e.jsx(N,{className:"u-no-padding"}),e.jsx(s.SidePanel.Content,{className:"u-no-padding",children:e.jsx(s.ScrollableContainer,{dependencies:[a.notification],belowIds:["panel-footer"],children:e.jsx(G,{formik:n})})}),e.jsxs(s.SidePanel.Footer,{className:"u-align--right",children:[e.jsx(s.Button,{appearance:"base",onClick:u,className:"u-no-margin--bottom",children:"Cancel"}),e.jsx(s.ActionButton,{appearance:"positive",loading:n.isSubmitting,onClick:()=>{n.submitForm()},className:"u-no-margin--bottom",disabled:!n.isValid||n.isSubmitting||!n.values.name,children:"Save changes"})]})]})},_=({group:t})=>{const a=h(),{canEditServerConfiguration:i}=x(),l=i();return e.jsxs(e.Fragment,{children:[e.jsx(s.Button,{appearance:"base",className:"u-no-margin--bottom",disabled:!l,onClick:()=>{a.openEditClusterGroup(t)},title:l?"Edit group":"You do not have permission to edit cluster groups",hasIcon:!0,children:e.jsx(s.Icon,{name:"edit"})}),a.panel===P.editClusterGroups&&a.group===t&&e.jsx(Q,{})]})},k=({group:t})=>{const a=s.useToastNotification(),[i,l]=E.useState(!1),d=T(),u=C(),{canEditServerConfiguration:n}=x(),m=n(),r=()=>{l(!0),L(t).then(()=>{d(`${f}/ui/cluster/groups`),a.success(e.jsxs(e.Fragment,{children:["Cluster group"," ",e.jsx(y,{type:"cluster-group",value:t,bold:!0})," deleted."]}))}).catch(b=>{l(!1),a.failure("Cluster group deletion failed",b)}).finally(()=>{u.invalidateQueries({queryKey:[p.cluster,p.groups]})})},o=t==="default",c=()=>o?"The default cluster group cannot be deleted":m?"Delete group":"You do not have permission to delete cluster groups";return e.jsx(s.ConfirmationButton,{onHoverText:c(),appearance:"base",loading:i,confirmationModalProps:{title:"Confirm delete",children:e.jsxs("p",{children:["This will permanently delete cluster group"," ",e.jsx(y,{type:"cluster-group",value:t,bold:!0}),"."]}),confirmButtonLabel:"Delete",onConfirm:r},disabled:o||i||!m,shiftClickEnabled:!0,showShiftClickHint:!0,title:"Delete group",className:"has-icon",children:e.jsx(s.Icon,{name:"delete"})})},A=()=>{const t=h(),a=s.useNotify(),i=s.useToastNotification(),l=C(),d=()=>{t.clear(),a.clear()},u=v({initialValues:{name:"",description:"",members:[]},onSubmit:n=>{const m={name:n.name,description:n.description,members:n.members};I(m).then(()=>{i.success(e.jsxs(e.Fragment,{children:["Cluster group"," ",e.jsx(S,{type:"cluster-group",value:n.name,to:`${f}/ui/cluster/groups`})," ","created."]})),d()}).catch(r=>{a.failure("Cluster group creation failed",r)}).finally(()=>{u.setSubmitting(!1),l.invalidateQueries({queryKey:[p.cluster,p.groups]}),l.invalidateQueries({queryKey:[p.cluster,p.groups,n.name]})})}});return e.jsxs(s.SidePanel,{children:[e.jsx(s.SidePanel.Header,{children:e.jsx(s.SidePanel.HeaderTitle,{children:"Create cluster group"})}),e.jsx(N,{className:"u-no-padding"}),e.jsx(s.SidePanel.Content,{className:"u-no-padding",children:e.jsx(s.ScrollableContainer,{dependencies:[a.notification],belowIds:["panel-footer"],children:e.jsx(G,{formik:u})})}),e.jsxs(s.SidePanel.Footer,{className:"u-align--right",children:[e.jsx(s.Button,{appearance:"base",onClick:d,className:"u-no-margin--bottom",children:"Cancel"}),e.jsx(s.ActionButton,{appearance:"positive",loading:u.isSubmitting,onClick:()=>{u.submitForm()},className:"u-no-margin--bottom",disabled:!u.isValid||u.isSubmitting||!u.values.name,children:"Create group"})]})]})},Y=()=>{const t=h(),{canEditServerConfiguration:a}=x(),i=a();return e.jsxs(e.Fragment,{children:[e.jsxs(s.Button,{appearance:"positive",className:"u-no-margin--bottom",disabled:!i,title:i?void 0:"You do not have permission to create cluster groups",hasIcon:!0,onClick:t.openCreateClusterGroup,children:[e.jsx(s.Icon,{name:"plus",light:!0}),e.jsx("span",{children:"Create group"})]}),t.panel===P.createClusterGroup&&e.jsx(A,{})]})},ee=()=>{const t=s.useNotify(),a=h(),{data:i=[],error:l,isLoading:d}=H(),{canEditServerConfiguration:u}=x();l&&t.failure("Loading cluster groups failed",l);const n=[{content:"Cluster group",className:"name",sortKey:"name"},{content:"Description",className:"description",sortKey:"description"},{content:"Used by"},{content:"Members",className:"members u-align--right",sortKey:"members"},{"aria-label":"Actions",className:"u-align--right actions"}],m=i.map(c=>{const b=c?.used_by??[],j=()=>{a.openEditClusterGroup(c.name)};return{key:c.name,name:c.name,columns:[{content:c.name,className:"name"},{content:c.description||"-",className:"description"},{content:b.length>0?b.map(g=>{if(g.startsWith("/1.0/projects/")){const w=g.replace("/1.0/projects/","");return e.jsx(V,{projectName:w,urlSuffix:"/configuration/clusters"},g)}return g}):"-"},{content:u()?e.jsx(s.Button,{appearance:"link",dense:!0,onClick:j,children:c.members.length}):c.members.length,className:"members u-align--right"},{content:e.jsx(s.List,{inline:!0,className:"actions-list u-no-margin--bottom",items:[e.jsx(_,{group:c.name},"edit"),e.jsx(k,{group:c.name},"delete")]}),className:"u-align--right actions"}],sortData:{name:c.name.toLowerCase(),description:c.description.toLowerCase(),members:c.members.length}}}),{rows:r,updateSort:o}=K({rows:m});return e.jsxs(q,{mainClassName:"cluster-list",title:e.jsx(D,{docPath:"/explanation/clustering/#cluster-groups",title:"Learn more about cluster groups",children:"Cluster groups"}),controls:e.jsx(Y,{}),children:[e.jsx(N,{}),e.jsx(s.Row,{children:e.jsx(s.ScrollableTable,{dependencies:[i,t.notification],tableId:"cluster-table",belowIds:["status-bar"],children:e.jsx(s.TablePagination,{data:r,id:"pagination",itemName:"cluster group",className:"u-no-margin--top","aria-label":"Table pagination control",children:e.jsx(s.MainTable,{id:"cluster-table",headers:n,sortable:!0,responsive:!0,onUpdateSort:o,emptyStateMsg:d&&e.jsx(s.Spinner,{className:"u-loader",text:"Loading cluster groups..."})})})})})]})};export{ee as default};