/
snap
/
lxd
/
current
/
share
/
lxd-ui
/
assets
/
File Upload :
llllll
Current File: //snap/lxd/current/share/lxd-ui/assets/CreateStorageVolume-CMqE1wTN.js
import{F as _,s as G,d as s,l as B,c as L,r as v,aE as W,k as X,i as w,f as z,g as E,bs as I,cb as H,j as e,t as J,m as Y,I as Z,bT as ee,q as F,R as oe,e as O,K as U,V as R,o as te,aS as ae}from"./index-dL2n30-Z.js";import{B as se}from"./BaseLayout-DoX0qSEj.js";import{M as ie,v as le,a as ne}from"./StorageVolumeForm-BktJTI1i.js";import{P as re}from"./StorageVolumesFilter-Ce3Ysqc8.js";import{F as me}from"./FormFooterLayout-Bmq4RXkd.js";import{u as ue,c as ce}from"./storage-volumes-DY5ibnP4.js";import{V as de}from"./VolumeLinkChip-BdiZokmn.js";import{P as pe}from"./ProgressBar-BDA2xlPC.js";import{S as ge}from"./StoragePoolSelector-BbIrdWMX.js";import{C as fe}from"./ClusterMemberSelector-CzVwwYbB.js";import"./FormMenuItem-DRePjRCl.js";import"./limits-CLEFMbq-.js";import"./AutoExpandingTextArea-CQuEMXHF.js";import"./scroll-Dmr9Jl9h.js";import"./instanceOptions-D4bz_1Ev.js";import"./ConfigFieldDescription-B5-bOr1x.js";import"./ScrollableTable-CQDmfMtz.js";import"./snapshots-AS6hXv2C.js";import"./DiskSizeSelector-DZsA03GF.js";import"./searchAndFilter-B29FrImZ.js";import"./ScrollableContainer-ceiHesUW.js";import"./StoragePoolSize-BwIynhzl.js";import"./Meter-BBGrNnHA.js";const ve=({close:m,uploadState:c,setUploadState:i,defaultVolumeName:n})=>{var q;const{project:a,isLoading:y}=_(),j=G(),l=s.useToastNotification(),h=s.useNotify(),C=B(),u=L(),[r,b]=v.useState(null),x=v.useState(null),{data:V=[]}=W(),{data:N=[]}=X(),Q=(o,g,f)=>{const d=ee({location:g,name:o,pool:f,project:a==null?void 0:a.name,type:"custom"}),k=e.jsxs(e.Fragment,{children:["Created volume"," ",e.jsx(oe,{type:"volume",value:o,to:d}),"."]}),S=[{label:"Configure",onClick:async()=>u(`${d}/configuration`)}];l.success(k,S)},K=o=>{l.failure("Volume creation failed.",new Error(o))},A=()=>{C.invalidateQueries({predicate:o=>o.queryKey[0]===F.volumes})},D=o=>{const g=new AbortController;b(g);const f=M?o.clusterMember:"";ue(o.volumeFile,o.name,(a==null?void 0:a.name)??"",o.pool,i,g,f).then(d=>{l.info(e.jsxs(e.Fragment,{children:["Upload completed. Now creating volume"," ",e.jsx(Y,{bold:!0,type:"volume",value:o.name}),"."]})),j.set(d.metadata.id,()=>{Q(o.name,o.clusterMember,o.pool)},K,A),T(),u(`/ui/project/${encodeURIComponent((a==null?void 0:a.name)??"")}/storage/volumes`)}).catch(d=>{var S;const k=new Error((S=d.response)==null?void 0:S.data.error);h.failure("Volume upload failed",k),t.setSubmitting(!1),i(null)})},t=w({initialValues:{name:n||"",pool:"",volumeFile:null,clusterMember:((q=N==null?void 0:N[0])==null?void 0:q.server_name)??""},validateOnMount:!0,enableReinitialize:!0,validationSchema:z().shape({name:E().test(...I((a==null?void 0:a.name)||"","custom",x)).optional()}),onSubmit:D}),P=V.find(o=>o.name===t.values.pool),M=H((P==null?void 0:P.driver)||""),T=v.useCallback(()=>{r==null||r.abort(),i(null),b(null),t.resetForm(),m(),h.clear()},[r,t.resetForm,m,h]),$=async o=>{const{onChange:g}=t.getFieldProps("volumeFile");if(g(o),o.currentTarget.files){const f=o.currentTarget.files[0];if(await t.setFieldValue("volumeFile",f),!n){const d=Z(f.name,"-import");await t.setFieldValue("name",d),await t.validateField("name"),t.setFieldTouched("name",!0,!0),t.errors.name||t.setFieldError("name",void 0)}}},p=t.values.volumeFile?"":"Please select a file before adding custom configuration.";return e.jsxs(e.Fragment,{children:[e.jsxs(s.Form,{onSubmit:t.handleSubmit,className:J({"u-hide":c}),children:[e.jsx(s.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=>void $(o)}),e.jsx(s.Input,{...t.getFieldProps("name"),id:"name",type:"text",label:"New volume name",placeholder:"Enter name",error:t.touched.name?t.errors.name:null,disabled:!!p,title:p}),e.jsx(ge,{value:t.values.pool,setValue:o=>{t.setFieldValue("pool",o)},selectProps:{id:"volume-import-pool",label:"Storage pool",disabled:y||!!p,title:p}}),e.jsx(fe,{...t.getFieldProps("clusterMember"),id:"clusterMember",label:"Target cluster member",disabled:!!p||!M,disableReason:M?p:"The selected pool is not cluster specific"})]}),e.jsxs("footer",{className:"p-modal__footer",id:"modal-footer",children:[e.jsx(s.Button,{appearance:"base",className:"u-no-margin--bottom",type:"button",onClick:T,children:"Cancel"}),e.jsx(s.ActionButton,{appearance:"positive",className:"u-no-margin--bottom",loading:t.isSubmitting||!!c,disabled:!t.isValid||t.isSubmitting||y||!t.values.volumeFile,onClick:()=>void t.submitForm(),children:"Upload and create"})]})]})},he=({close:m,name:c})=>{const[i,n]=v.useState(null);return e.jsxs(s.Modal,{close:m,className:"upload-volume-modal",title:"Upload volume file",closeOnOutsideClick:!1,children:[e.jsx(O,{className:"u-no-padding u-no-margin"}),i&&e.jsxs(e.Fragment,{children:[e.jsx(pe,{percentage:Math.floor(i.percentage)}),e.jsxs("p",{children:[U(i.loaded)," loaded of"," ",U(i.total??0)]})]}),e.jsx(ve,{close:m,uploadState:i,setUploadState:n,defaultVolumeName:c})]})},be=({name:m})=>{const{openPortal:c,closePortal:i,isOpen:n,Portal:a}=s.usePortal();return e.jsxs(e.Fragment,{children:[e.jsx(s.Button,{onClick:c,type:"button",children:e.jsx("span",{children:"Upload volume file"})}),n&&e.jsxs(a,{children:[e.jsx(he,{close:i,name:m}),e.jsx("div",{})]})]})},Ke=()=>{const m=L(),c=s.useNotify(),i=s.useToastNotification(),n=B(),[a,y]=v.useState(R(ie)),j=v.useState(null),{project:l}=te(),[h]=ae();if(!l)return e.jsx(e.Fragment,{children:"Missing project"});const C=z().shape({name:E().test(...I(l,"custom",j)).required("This field is required")}),u=w({initialValues:{content_type:"filesystem",volumeType:"custom",name:"",project:l,pool:h.get(re)||"",size:"GiB",readOnly:!1,isCreating:!0,entityType:"storageVolume"},validationSchema:C,onSubmit:r=>{const b=le(r,l);ce(r.pool,l,b,r.clusterMember).then(()=>{n.invalidateQueries({queryKey:[F.storage]}),n.invalidateQueries({queryKey:[F.customVolumes,l]}),n.invalidateQueries({queryKey:[F.projects,l]}),n.invalidateQueries({predicate:V=>V.queryKey[0]===F.volumes}),m(`/ui/project/${encodeURIComponent(l)}/storage/volumes`);const x={...b,location:r.clusterMember??"none"};i.success(e.jsxs(e.Fragment,{children:["Storage volume ",e.jsx(de,{volume:x})," ","created."]}))}).catch(x=>{u.setSubmitting(!1),c.failure("Storage volume creation failed",x)})}});return e.jsxs(se,{title:"Create volume",contentClassName:"storage-volume-form",children:[e.jsx(O,{}),e.jsx(ne,{formik:u,section:a,setSection:r=>{y(R(r))}}),e.jsxs(me,{children:[e.jsx(s.Button,{appearance:"base",onClick:async()=>m(`/ui/project/${encodeURIComponent(l)}/storage/volumes`),children:"Cancel"}),e.jsx(be,{name:u.values.name}),e.jsx(s.ActionButton,{appearance:"positive",loading:u.isSubmitting,disabled:!u.isValid||u.isSubmitting,onClick:()=>void u.submitForm(),children:"Create"})]})]})};export{Ke as default};
Copyright ©2k19 -
Hexid
|
Tex7ure