Your IP : 216.73.216.189


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/EditStorageBucketPanel-CMxW242a.js

import{bk as x,R as m,az as g,cz as N,dh as L,aB as T,aD as O,cp as B,u as $,ae as R,w as d,B as I,d as l,r as _,t as K,T as q,c as V,K as z,J as A,j as s,y as P,O as G,a$ as J,s as w,k as M,v as F,p as Y,U as W}from"./index-BFGypnt-.js";import{u as D}from"./usePanelParams-CV5ZHNeu.js";import{A as X}from"./AutoExpandingTextArea-WEdimI5c.js";import{S as Z}from"./StoragePoolSelector-CIzPJc24.js";import{D as ee}from"./DiskSizeSelector-C_YZZUSe.js";import{o as te,S as ne,C as ae,n as oe}from"./useStoragePools-qBtKr1j9.js";const U=["can_delete","can_edit"],se=async(e,a,n)=>{const t=new URLSearchParams;return t.set("project",n),t.set("recursion","1"),B(t,a,U),fetch(`${m}/1.0/storage-pools/${encodeURIComponent(e)}/buckets?${t.toString()}`).then(g).then(o=>o.metadata.map(r=>({...r,pool:e})))},re=async(e,a)=>{const t=(await te(e)).filter(r=>ne(r.driver)).map(async r=>se(r.name,e,a));return(await Promise.all(t)).flat()},ce=async(e,a,n,t,o)=>{const r=new URLSearchParams;return r.set("project",a),x(r,o),B(r,t,U),fetch(`${m}/1.0/storage-pools/${encodeURIComponent(e)}/buckets/${encodeURIComponent(n)}?${r.toString()}`).then(g).then(c=>({...c.metadata,pool:e}))},Ce=async(e,a,n,t)=>{const o=new URLSearchParams;return o.set("project",a),x(o,t),fetch(`${m}/1.0/storage-pools/${encodeURIComponent(n)}/buckets?${o.toString()}`,{method:"POST",headers:{"Content-Type":"application/json"},body:e}).then(g).then(r=>r)},ie=async(e,a,n,t)=>{const o=new URLSearchParams;return o.set("project",n),x(o,t),fetch(`${m}/1.0/storage-pools/${encodeURIComponent(a)}/buckets/${encodeURIComponent(e.name)}?${o.toString()}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}).then(g).then(r=>r)},Q=async(e,a,n)=>{const t=new URLSearchParams;return t.set("project",n),fetch(`${m}/1.0/storage-pools/${encodeURIComponent(a)}/buckets/${encodeURIComponent(e)}?${t.toString()}`,{method:"DELETE"}).then(g).then(o=>o)},$e=async(e,a,n)=>{const t=[],r=(await Promise.allSettled(e.map(async c=>({operation:await Q(c.name,c.pool,a),bucket:c})))).map(c=>{if(c.status==="rejected")throw c?.reason;return c.value});return n&&await Promise.all(r.map(async({operation:c})=>{c.metadata.id&&await N(c.metadata.id)})),new Promise(c=>{e.forEach(i=>{const p={name:i.name,type:"bucket",href:L(i.name,i.pool,a)};T(t,p),O(t,e.length,c)})})},le=async(e,a,n)=>{const t=new URLSearchParams;return t.set("project",n),t.set("recursion","1"),B(t,a,U),fetch(`${m}/1.0/storage-pools/${encodeURIComponent(e.pool)}/buckets/${encodeURIComponent(e.name)}/keys?${t.toString()}`).then(g).then(o=>o.metadata)},ue=async(e,a,n,t)=>{const o=new URLSearchParams;return o.set("project",t),B(o,n,U),fetch(`${m}/1.0/storage-pools/${encodeURIComponent(e.pool)}/buckets/${encodeURIComponent(e.name)}/keys/${encodeURIComponent(a)}?${o.toString()}`).then(g).then(r=>r.metadata)},ke=async(e,a,n,t)=>{const o=new URLSearchParams;return o.set("project",a),fetch(`${m}/1.0/storage-pools/${encodeURIComponent(n)}/buckets/${encodeURIComponent(t)}/keys?${o.toString()}`,{method:"POST",headers:{"Content-Type":"application/json"},body:e}).then(g).then(r=>r)},xe=async(e,a,n,t,o)=>{const r=new URLSearchParams;return r.set("project",t),x(r,o),fetch(`${m}/1.0/storage-pools/${encodeURIComponent(n)}/buckets/${encodeURIComponent(e)}/keys/${encodeURIComponent(a.name)}?${r.toString()}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}).then(g).then(c=>c)},de=async(e,a,n,t)=>{const o=new URLSearchParams;return o.set("project",t),fetch(`${m}/1.0/storage-pools/${encodeURIComponent(n)}/buckets/${encodeURIComponent(e)}/keys/${encodeURIComponent(a)}?${o.toString()}`,{method:"DELETE"}).then(g).then(r=>r)},Be=async(e,a,n,t)=>{const o=[],c=(await Promise.allSettled(a.map(async i=>({operation:await de(e.name,i.name,e.pool,n),key:i})))).map(i=>{if(i.status==="rejected")throw i?.reason;return i.value});return t&&await Promise.all(c.map(async({operation:i})=>{i.metadata.id&&await N(i.metadata.id)})),new Promise(i=>{a.forEach(p=>{const S={name:p.name,type:"bucket-key",href:L(e.name,e.pool,n)};T(o,S),O(o,a.length,i)})})},Re=e=>{const{isFineGrained:a}=$();return R({queryKey:[d.storage,e,d.buckets],queryFn:async()=>re(a,e)})},Ue=(e,a,n,t)=>{const{isFineGrained:o}=$();return R({queryKey:[d.storage,a,n,d.buckets,e,t],queryFn:async()=>ce(a,n,e,o,t??null)})},ve=(e,a,n)=>{const{isFineGrained:t}=$();return R({queryKey:[d.storage,e.pool,n,d.buckets,e.name,d.keys,a],queryFn:async()=>ue(e,a,t,n)})},Pe=(e,a)=>{const{isFineGrained:n}=$();return R({queryKey:[d.storage,e.pool,a,d.buckets,e.name,d.keys],queryFn:async()=>le(e,n,a)})},E=()=>{const{isFineGrained:e}=$();return{canDeleteBucket:t=>I(e,"can_delete",t?.access_entitlements),canEditBucket:t=>I(e,"can_edit",t?.access_entitlements)}},me=({bucket:e,classname:a,isDetailPage:n})=>{const t=l.useNotify(),[o,r]=_.useState(!1),c=K(),{canDeleteBucket:i}=E(),{project:p}=q(),S=p?.name||"",k=V(),C=l.useToastNotification(),{hasStorageAndNetworkOperations:h}=z(),f=A(),u=()=>{c.invalidateQueries({queryKey:[d.storage,S,d.buckets]})},j=()=>{u();const y=`${m}/ui/project/${encodeURIComponent(p?.name||"")}/storage/pool/${encodeURIComponent(e.pool)}/bucket/${encodeURIComponent(e.name)}`;location.pathname.startsWith(y)&&k(`${m}/ui/project/${encodeURIComponent(p?.name||"")}/storage/buckets`),C.success(s.jsxs(s.Fragment,{children:["Storage bucket ",s.jsx(P,{bold:!0,type:"bucket",value:e.name})," ","deleted."]}))},b=y=>{u(),r(!1),t.failure("Storage bucket deletion failed",y)},v=()=>{r(!0),Q(e.name,e.pool,S).then(y=>{h?(C.info(s.jsxs(s.Fragment,{children:["Deletion of storage bucket"," ",s.jsx(P,{bold:!0,type:"bucket",value:e.name})," has started."]})),f.set(y.metadata.id,()=>{j()},H=>{b(new Error(H))})):j()}).catch(y=>{b(y)})};return s.jsxs(l.ConfirmationButton,{loading:o,confirmationModalProps:{title:"Confirm delete",children:s.jsxs("p",{children:["This will permanently delete bucket"," ",s.jsx(P,{type:"bucket",value:e.name,bold:!0}),".",s.jsx("br",{}),"This action cannot be undone, and can result in data loss."]}),confirmButtonLabel:"Delete",onConfirm:v},appearance:n?"default":"base",className:a,shiftClickEnabled:!0,showShiftClickHint:!0,disabled:!i(e),onHoverText:i(e)?"Delete bucket":"You do not have permission to delete this bucket.",children:[s.jsx(l.Icon,{name:"delete"}),n&&s.jsx("span",{children:"Delete"})]})},pe=({bucket:e,classname:a,isDetailPage:n})=>{const t=D(),{canEditBucket:o}=E();return s.jsxs(l.Button,{className:a,appearance:n?"default":"base",hasIcon:!0,onClick:()=>{t.openEditStorageBucket(e.name,e.pool,e.location)},title:o(e)?"Edit bucket":"You do not have permission to edit this bucket",children:[s.jsx(l.Icon,{name:"edit"}),n&&s.jsx("span",{children:"Configure"})]},`${e.name}-edit`)},we=({bucket:e,className:a,isDetailPage:n})=>{const t=G(J),o=n?t?"p-contextual-menu__link":"p-segmented-control__button":"",r=[s.jsx(pe,{classname:w(o,"has-icon",{"is-dense":!n}),bucket:e,isDetailPage:n},"edit"),s.jsx(me,{classname:w(o,"has-icon",{"is-dense":!n}),bucket:e,isDetailPage:n},"delete")];return n?s.jsx(s.Fragment,{children:t?s.jsx(l.ContextualMenu,{closeOnOutsideClick:!1,toggleLabel:"Actions",position:"left",hasToggleIcon:!0,title:"actions",children:c=>s.jsx("span",{children:[...r].map(i=>_.cloneElement(i,{onClose:c}))})}):s.jsx("div",{className:"p-segmented-control",children:s.jsx("div",{className:"p-segmented-control__list",children:r})})}):s.jsx(l.List,{inline:!0,className:w(a,"actions-list"),items:r})},he=({formik:e,bucket:a})=>{const{canEditBucket:n}=E(),t=c=>({id:c,name:c,onBlur:e.handleBlur,onChange:e.handleChange,value:e.values[c]??"",error:e.touched[c]?e.errors[c]:null,placeholder:`Enter ${c.replaceAll("_"," ")}`}),o=!!a,r=!o||n(a)?"":"You do not have permission to modify this bucket";return s.jsxs(l.Form,{onSubmit:e.handleSubmit,className:"bucket-create-form",children:[s.jsx(l.Input,{type:"submit",hidden:!0,value:"Hidden input"}),o?s.jsx(l.OutputField,{id:"storage_bucket_pool",label:"Storage pool",value:e.values.pool,help:"Storage bucket pool can't be changed"}):s.jsx(Z,{value:e.values.pool,setValue:c=>{e.setFieldValue("pool",c)},invalidDrivers:Object.keys(ae).filter(c=>c!==oe),selectProps:{id:"bucket-create-pool",label:"Storage pool",disabled:!!r,help:!e.errors.pool&&"Pool must have a Ceph Object driver",error:e.errors.pool,onBlur:e.handleBlur,takeFocus:!0,required:!0}}),o?s.jsx(l.OutputField,{id:"storage_bucket_name",label:"Name",value:e.values.name,help:"Storage bucket name can't be changed"}):s.jsx(l.Input,{...t("name"),type:"text",label:"Name",required:!0,disabled:!!r,title:r}),s.jsx(ee,{label:"Size",value:e.values.size,setMemoryLimit:c=>{e.setFieldValue("size",c)},disabled:!!r,disabledReason:r}),s.jsx(X,{...t("description"),label:"Description",disabled:!!r,title:r})]})},Ee=({bucket:e})=>{const a=D(),n=l.useNotify(),t=l.useToastNotification(),{project:o}=q(),r=K(),c=()=>{a.clear(),n.clear()},{hasStorageAndNetworkOperations:i}=z(),p=A(),S=()=>{r.invalidateQueries({queryKey:[d.storage,e.pool,o?.name??"",d.buckets,e.name]}),r.invalidateQueries({queryKey:[d.storage,o?.name??"",d.buckets]})},k=u=>{S(),t.success(s.jsxs(s.Fragment,{children:["Storage bucket"," ",s.jsx(F,{type:"bucket",value:u,to:`${m}/ui/project/${encodeURIComponent(o?.name??"")}/storage/buckets`})," ","updated."]})),c()},C=(u,j)=>{S(),h.setSubmitting(!1),n.failure(`Update of storage bucket ${u} failed`,j)},h=M({initialValues:{name:e?.name,pool:e?.pool,size:e?.config.size,description:e?.description,target:e?.location},enableReinitialize:!0,onSubmit:u=>{const j={name:u.name,config:{size:u.size},description:u.description};ie(j,u.pool,o?.name||"",u.target).then(b=>{i?(t.info(s.jsxs(s.Fragment,{children:["Update of storage bucket"," ",s.jsx(F,{type:"bucket",value:u.name,to:`${m}/ui/project/${encodeURIComponent(o?.name??"")}/storage/buckets`})," ","has started."]})),p.set(b.metadata.id,()=>{k(u.name)},v=>{C(u.name,new Error(v))})):k(u.name)}).catch(b=>{C(u.name,b)})}}),f=(h.values.description!==e.description?1:0)+(h.values.size!==e.config.size?1:0);return s.jsx(s.Fragment,{children:s.jsxs(l.SidePanel,{children:[s.jsx(l.SidePanel.Header,{children:s.jsxs(l.SidePanel.HeaderTitle,{children:["Edit storage bucket ",e.name]})}),s.jsx(Y,{className:"u-no-padding"}),s.jsx(l.SidePanel.Content,{className:"u-no-padding",children:s.jsx(l.ScrollableContainer,{dependencies:[n.notification],belowIds:["panel-footer"],children:s.jsx(he,{formik:h,bucket:e})})}),s.jsxs(l.SidePanel.Footer,{className:"u-align--right",children:[s.jsx(l.Button,{appearance:"base",onClick:c,className:"u-no-margin--bottom",children:"Cancel"}),s.jsx(l.ActionButton,{appearance:"positive",loading:h.isSubmitting,onClick:()=>{h.submitForm()},className:"u-no-margin--bottom",disabled:!h.isValid||h.isSubmitting||f===0,children:f===0?"Save changes":`Save ${f} ${W("change",f)}`})]})]})})};export{Ee as E,he as S,Pe as a,Re as b,Ce as c,$e as d,we as e,de as f,Be as g,ke as h,ve as i,xe as j,Ue as k,E as u};