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/CreateStorageVolume-CqjhKrhA.js

import{T as G,J as O,d as a,t as B,c as L,r as h,k as A,f as z,h as E,c5 as I,j as e,s as H,y as J,R,Y as W,cS as X,w as S,v as Y,p as Q,a0 as q,a5 as w,I as Z,b8 as ee,K as oe}from"./index-BFGypnt-.js";import{B as te}from"./BaseLayout-ft99KK4_.js";import{M as ae,v as se,d as re}from"./StorageVolumeForm-CW2hs3vZ.js";import{P as ie}from"./StorageVolumesFilter-E3gN2QnJ.js";import{F as le}from"./FormFooterLayout-CMGxv4XX.js";import{u as ne,c as ce}from"./storage-volumes-CNe_c3nC.js";import{V as me}from"./VolumeLinkChip-CgrDSaXC.js";import{P as ue}from"./ProgressBar-BgH9rTvH.js";import{S as de}from"./StoragePoolSelector-CIzPJc24.js";import{C as pe}from"./ClusterMemberSelector-Bokudnyt.js";import{u as fe,l as ge}from"./useStoragePools-qBtKr1j9.js";import{u as ve}from"./useClusterMembers-B29_ixY7.js";import"./FormMenuItem-fhYfVpHc.js";import"./ConfigurationTable-CmO6jSmV.js";import"./ConfigFieldDescription-CY0sdTp6.js";import"./useProfiles-CErbukD2.js";import"./DiskSizeSelector-C_YZZUSe.js";import"./ScrollableForm-D-7nf2YI.js";import"./StoragePoolSize-ChYxPd_8.js";import"./Meter-VGEmUMfL.js";import"./ProjectRichChip-CtiU36yR.js";import"./snapshots-DETOqD-5.js";import"./ScrollableConfigurationTable-Cdfv_OdM.js";import"./instanceAndProfilePayloads-DSYCnS-r.js";import"./images-C6WqBeZG.js";import"./searchAndFilter-DtC_P-vv.js";import"./cluster-members-CG6XHzn4.js";const he=({close:n,uploadState:m,setUploadState:s,defaultVolumeName:l})=>{const{project:u,isLoading:y}=G(),M=O(),r=a.useToastNotification(),b=a.useNotify(),P=B(),C=L(),[V,x]=h.useState(null),N=h.useState(null),{data:c=[]}=fe(),{data:i=[]}=ve(),p=(o,g,v)=>{const d=X({location:g,name:o,pool:v,project:u?.name,type:"custom"}),T=e.jsxs(e.Fragment,{children:["Created volume"," ",e.jsx(Y,{type:"volume",value:o,to:d}),"."]}),_=[{label:"Configure",onClick:async()=>C(`${d}/configuration`)}];r.success(T,_)},F=o=>{r.failure("Volume creation failed.",new Error(o))},j=()=>{P.invalidateQueries({predicate:o=>o.queryKey[0]===S.volumes})},$=o=>{const g=new AbortController;x(g);const v=k?o.clusterMember:"";ne(o.volumeFile,o.name,u?.name??"",o.pool,s,g,v).then(d=>{r.info(e.jsxs(e.Fragment,{children:["Upload completed. Now creating volume"," ",e.jsx(J,{bold:!0,type:"volume",value:o.name}),"."]})),M.set(d.metadata.id,()=>{p(o.name,o.clusterMember,o.pool)},F,j),U(),C(`${R}/ui/project/${encodeURIComponent(u?.name??"")}/storage/volumes`)}).catch(d=>{const T=new Error(d.response?.data.error);b.failure("Volume upload failed",T),t.setSubmitting(!1),s(null)})},t=A({initialValues:{name:l||"",pool:"",volumeFile:null,clusterMember:i?.[0]?.server_name??""},validateOnMount:!0,enableReinitialize:!0,validationSchema:z().shape({name:E().test(...I(u?.name||"","custom",N)).optional()}),onSubmit:$}),K=c.find(o=>o.name===t.values.pool),k=ge(K?.driver||""),U=h.useCallback(()=>{V?.abort(),s(null),x(null),t.resetForm(),n(),b.clear()},[V,t.resetForm,n,b]),D=async o=>{const{onChange:g}=t.getFieldProps("volumeFile");if(g(o),o.currentTarget.files){const v=o.currentTarget.files[0];if(await t.setFieldValue("volumeFile",v),!l){const d=W(v.name,"-import");await t.setFieldValue("name",d),await t.validateField("name"),t.setFieldTouched("name",!0,!0),t.errors.name||t.setFieldError("name",void 0)}}},f=t.values.volumeFile?"":"Please select a file before adding custom configuration.";return e.jsxs(e.Fragment,{children:[e.jsxs(a.Form,{onSubmit:t.handleSubmit,className:H({"u-hide":m}),children:[e.jsx(a.Input,{id:"volume-file",name:"volumeFile",type:"file",accept:".tar, application/gzip, application/x-bzip, application/x-xz, application/x-lzma, application/x-squashfs, application/x-qcow2, application/zstd",label:"LXD backup archive (.tar.gz)",onChange:o=>{D(o)}}),e.jsx(a.Input,{...t.getFieldProps("name"),id:"name",type:"text",label:"New volume name",placeholder:"Enter name",error:t.touched.name?t.errors.name:null,disabled:!!f,title:f}),e.jsx(de,{value:t.values.pool,setValue:o=>{t.setFieldValue("pool",o)},selectProps:{id:"volume-import-pool",label:"Storage pool",disabled:y||!!f,title:f}}),e.jsx(pe,{...t.getFieldProps("clusterMember"),id:"clusterMember",label:"Target cluster member",disabled:!!f||!k,disableReason:k?f:"The selected pool is not cluster specific"})]}),e.jsxs("footer",{className:"p-modal__footer",id:"modal-footer",children:[e.jsx(a.Button,{appearance:"base",className:"u-no-margin--bottom",type:"button",onClick:U,children:"Cancel"}),e.jsx(a.ActionButton,{appearance:"positive",className:"u-no-margin--bottom",loading:t.isSubmitting||!!m,disabled:!t.isValid||t.isSubmitting||y||!t.values.volumeFile,onClick:()=>{t.submitForm()},children:"Upload and create"})]})]})},be=({close:n,name:m})=>{const[s,l]=h.useState(null);return e.jsxs(a.Modal,{close:n,className:"upload-volume-modal",title:"Upload volume file",closeOnOutsideClick:!1,children:[e.jsx(Q,{className:"u-no-padding u-no-margin"}),s&&e.jsxs(e.Fragment,{children:[e.jsx(ue,{percentage:Math.floor(s.percentage)}),e.jsxs("p",{children:[q(s.loaded)," loaded of"," ",q(s.total??0)]})]}),e.jsx(he,{close:n,uploadState:s,setUploadState:l,defaultVolumeName:m})]})},xe=({name:n})=>{const{openPortal:m,closePortal:s,isOpen:l,Portal:u}=a.usePortal();return e.jsxs(e.Fragment,{children:[e.jsx(a.Button,{onClick:m,type:"button",children:e.jsx("span",{children:"Upload volume file"})}),l&&e.jsxs(u,{children:[e.jsx(be,{close:s,name:n}),e.jsx("div",{})]})]})},Ge=()=>{const n=L(),m=a.useNotify(),s=a.useToastNotification(),l=B(),[u,y]=h.useState(w(ae)),M=h.useState(null),{project:r}=Z(),[b]=ee(),P=O(),{hasStorageAndProfileOperations:C}=oe();if(!r)return e.jsx(e.Fragment,{children:"Missing project"});const V=z().shape({name:E().test(...I(r,"custom",M)).required("This field is required")}),x=(i,p)=>{l.invalidateQueries({queryKey:[S.storage]}),l.invalidateQueries({queryKey:[S.customVolumes,r]}),l.invalidateQueries({queryKey:[S.projects,r]}),l.invalidateQueries({predicate:j=>j.queryKey[0]===S.volumes}),n(`${R}/ui/project/${encodeURIComponent(r)}/storage/volumes`);const F={...i,location:p??"none"};s.success(e.jsxs(e.Fragment,{children:["Storage volume ",e.jsx(me,{volume:F})," created."]}))},N=i=>{c.setSubmitting(!1),m.failure("Storage volume creation failed",i)},c=A({initialValues:{content_type:"filesystem",volumeType:"custom",name:"",project:r,pool:b.get(ie)||"",size:"GiB",readOnly:!1,isCreating:!0,entityType:"storageVolume"},validationSchema:V,onSubmit:i=>{const p=se(i,r);ce(i.pool,r,p,i.clusterMember).then(F=>{C?P.set(F.metadata.id,()=>{x(p,i.clusterMember)},j=>{N(new Error(j))}):x(p,i.clusterMember)}).catch(N)}});return e.jsxs(te,{title:"Create volume",contentClassName:"storage-volume-form",children:[e.jsx(Q,{}),e.jsx(re,{formik:c,section:u,setSection:i=>{y(w(i))}}),e.jsxs(le,{children:[e.jsx(a.Button,{appearance:"base",onClick:async()=>n(`${R}/ui/project/${encodeURIComponent(r)}/storage/volumes`),children:"Cancel"}),e.jsx(xe,{name:c.values.name}),e.jsx(a.ActionButton,{appearance:"positive",loading:c.isSubmitting,disabled:!c.isValid||c.isSubmitting,onClick:()=>{c.submitForm()},children:"Create"})]})]})};export{Ge as default};